Linux
用另一個文件中的行替換一個文件中的正則表達式匹配
我正在嘗試用
=> '.*',
另一個文件中的行替換與一個文件中的正則表達式匹配的行。兩個範例文件。
文件 1:
'text_clear' => 'Clear', 'text_search' => 'Search', 'text_enabled' => 'Enabled',
文件 2:
emptied lost turned off
我正在嘗試使用 awk/sed/grep 執行 linux 命令來創建第三個將輸出的文件
文件 3:
'text_clear' => 'emptied', 'text_search' => 'lost', 'text_enabled' => 'turned off',
我已經成功地提取了我想要編輯 python 腳本的內容,但如果可能的話,我只想使用 linux 命令來完成這兩項工作。
我已經為此苦苦思索了 3 個小時。任何幫助,將不勝感激。
code.awk
:BEGIN{j=1} NR==FNR{a[NR]=$0;next} sub(/=> '.*',$/,"=> '"a[j]"',"){++j} 1
awk -f code.awk file2 file1 > file3
逐行解釋:
- 初始化
j=1
.- 將每一行放入
file2
數組中a
。- 在
file1
中,對於每一行,嘗試用 的連接替換與=> '.*',$
正則表達式匹配的字元串=> '
a[j]
',
。如果發生替換,則遞增j
。- 列印該行。
$ cat file3 'text_clear' => 'emptied', 'text_search' => 'lost', 'text_enabled' => 'turned off',
另一種 awk 方法,使用
match
andsubstr
:$ awk -v pat="'[^']*'" -v q="'" -v file2='File2' ' BEGIN{OFS=FS=" => "} match($2,pat) && ((getline str < file2) > 0) { $2 = substr($2,1,RSTART-1) q str q substr($2,RSTART+RLENGTH) } 1 ' File1 'text_clear' => 'emptied', 'text_search' => 'lost', 'text_enabled' => 'turned off',