我是新來的bash腳本,但我要做到以下幾點:使用bash腳本的正則表達式
我要檢測的模式「STRING_2」 STRING_1在FILE_1並追加STRING_2至FILE_2
什麼是簡單的方法來做到這一點?
我是新來的bash腳本,但我要做到以下幾點:使用bash腳本的正則表達式
我要檢測的模式「STRING_2」 STRING_1在FILE_1並追加STRING_2至FILE_2
什麼是簡單的方法來做到這一點?
你的問題相當模糊;但我猜測你想
什麼,如果STRING_1在FILE_1存在,追加STRING_2至FILE_2
answer=`grep -c STRING_1 FILE_1`
if [ "$answer" -gt 0 ]
then
echo "$STRING_2" >> FILE_2
fi
你可以這樣做:
sed 's/STRING_1 \"(.*)\"/\1/g' FILE_1 >FILE_2
這裏發生了什麼,是sed是灼熱的FILE_1中的第一個和第二個'/'之間的所有內容以及第二個和第三個'/'之間的內容發送給FILE_2。
()組分配給\ 1 \ 2,等等......所以一切都在\之間「S是你STRING_2。
你需要使用'>>'來追加。沒有必要轉義雙引號,但它是轉義括號(除非你使用'-r'選項來指定'sed'。將模式從'。*'改爲'[^「 ] *'因爲'sed'正則表達式是貪婪的。 – 2010-12-11 01:07:55
如果我理解正確的問題,所以你有一個包含文件:
word1a "word1b"
word2a "word2b"
word3a "word3b"
您可以用sed提取包含引號之間的值,然後重定向到一個文件
sed 's/.*"\(.*\)"/\1/' FILE_1 > FILE_2
您也可以使用此:
grep '^\s*STRING_1\s*\".*\"\s*$' FILE_1 | awk -F \" '{printf $2"\n"}' >> FILE_2
它能夠正確處理輸入文件的多個空白字符,並在FILE_2末尾的STRING_2後面追加換行符。
grep -Po '(?<=aaa ")([^"]*)(?=")' FILE_1 >> FILE_2
不錯..我沒有考慮使用否定斷言和'-o',但它似乎工作,並且是避免使用'grep | sed'管道.. – redShadow 2010-12-11 19:24:32
這是我現在:
SED的/ STRING_1 \ S *:\ S * 「([^」] *)「/ \ 1/G' 」FILE_1「> > FILE_2;
我希望它檢測以下模式文件1:
STRING_1 : "STRING_2"
並保存STRING_2到文件2
但這不起作用,它附加了很多的隨機東西到FILE_2(這不應該匹配)
或'grep -c STRING_1 FILE_1 && echo「$ STRING_2」>> FILE_2' :)但我不確定這是他的意思,雖然問題非常模糊.. – redShadow 2010-12-11 00:59:40
如果STRING_2未知,則無法使用。 redShadow的建議的替代方案,但仍然使用'if'將是:'如果grep -sq STRING_1 FILE_1; then'。沒有變量,括號或比較需要。 – 2010-12-11 01:12:30