我被困在最後一步,希望有人能幫助我。匹配2個文件中的通用行,並在正則表達式中編輯第二個文件
我有2個文件:
文件1 =
青蘋果
文件2 =
青蘋果/數量/ 100
桃花紅/數量/ 200
我的代碼:
的grep -f文件1文件2 | SED的/數量/ totalXYZ /(*)「
=青蘋果/ totalXYZ
我想申請就到file2這樣的結果是這樣的:
文件2 =
青蘋果/ totalXYZ
桃花紅/數量/ 200
感謝
我被困在最後一步,希望有人能幫助我。匹配2個文件中的通用行,並在正則表達式中編輯第二個文件
我有2個文件:
文件1 =
青蘋果
文件2 =
青蘋果/數量/ 100
桃花紅/數量/ 200
我的代碼:
的grep -f文件1文件2 | SED的/數量/ totalXYZ /(*)「
=青蘋果/ totalXYZ
我想申請就到file2這樣的結果是這樣的:
文件2 =
青蘋果/ totalXYZ
桃花紅/數量/ 200
感謝
則可以使用AWK這樣得到:
awk -f grepandreplace.awk file2 file1
的 「grepandreplace.awk」 的代碼是:
#!/usr/bin/awk -f
BEGIN {
FS = "/";
f_grep = ARGV[2];
ARGC = 2;
while ((getline < f_grep) > 0) {
grep[$1] = "";
}
}
{
if ($1 in grep) {
print $1"/totalXYZ";
} else {
print $0;
}
}
而且我得到了你想要的輸出:
Green Apple/totalXYZ
Red Peach/quantity/200
有任何問題嗎?留下評論。
您可以使用2 greps在一行中得到它:第一個用於匹配,第二個用於反向匹配(-v)。 然後將第二個輸出附加到第一個輸出:
echo -e `grep -f file1 file2 | sed 's/quantity.*/totalXYZ/'`"\n"`grep -vf file1 file2`
再次感謝rmunoz。是的,這也起作用了!但是,如何讓它寫入file2?我記住了:sed -i .... – user1700391
其實,使用你的代碼,我會將它重定向到file3,然後是mv file3 file2。再次感謝rmunoz的幫助。 – user1700391
你不需要file3,你可以將輸出重定向到file2。不用謝 ;-) – arutaku
謝謝!這太棒了! – user1700391
我還發現了另一種方法在一行中完成它(請參閱我的下一個答案)。謝謝 – arutaku