Bash

從一個文件中提取文本並在另一個文件中替換

  • January 19, 2017

我有兩個自動生成的文件。我事先不知道文件的長度是多少。

我需要編寫一個腳本,該腳本從文件#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 的範例,以便為您提供更好的程式碼。這些只是建議;結果對於您的實際範圍可能不正確。

引用自:https://unix.stackexchange.com/questions/338689