Bash
從一個文件中提取文本並在另一個文件中替換
我有兩個自動生成的文件。我事先不知道文件的長度是多少。
我需要編寫一個腳本,該腳本從文件#1 的倒數第二行中獲取第一個單詞,我們稱之為 $ WORDONE, and replace whatever word comes AFTER a keyword, let’s call it $ 關鍵字,在文件#2 中。$KEYWORD 在文件#2 中只出現一次。
也就是說,文件#2 應該是:
內容 ….. $ KEYWORD $ WORDONE 內容….
我也最好只使用從一開始就包含在大多數發行版中的 grep、sed 或其他工具。
還根據評論我必須改寫這個答案(bash中的程式碼)
正如評論中所建議的,如果您的目標是獲取 file1 倒數第二行的第一個單詞,那麼正確的方法是
WORDONE=$(tail -n2 file1 |head -n1 |grep 'REGEX Expression to get 1st word') #or even this way that i tend to personally prefer: WORDONE=$(tail -n2 file1 |head -n1 |awk -F"words delimiter" '{print $1}') #tail will isolate the last two lines and then head will get the first of them = one line before end. # In case of grep you need to built a regulare expression to give you the first word of this line. # In case of awk you need to define the delimiter between words in this line (space, comma, etc) and awk will return to you the first word. #To append wordone to a keyword in file2 you can use: sed "s#$KEYWORD#$KEYWORD $WORDONE#" file2 #You can use g at the end of sed for global replacement of all $KEYWORD appearances. #Otherwise only the first $KEYWORD will be replaced. #To write replacement immediately to the file2 use `sed -i`
更多提示:如果您要查找的值從一開始就已知,則不需要 tail 和 head。您只需在 file1 中 grep 搜尋您的搜尋詞。
WORD=$(grep "search term" file1)
PS:預設 gnu grep 在找到搜尋詞時返回整行。
備註:
最好包含 file1 和 file2 的範例,以便為您提供更好的程式碼。這些只是建議;結果對於您的實際範圍可能不正確。