2015-09-03 54 views
4

我很難完成我的腳本,因爲這部分功能並未按照我希望的方式運行。在Bash中替換垂直線

我此行我的腳本:

cat /home/tmp/temp1.txt | awk '{gsub("~",RS);gsub("*",RS);print}' > /home/tmp/temp.txt 

它工作得很好,是的。 但是當我做這樣的事情:

cat /home/tmp/temp1.txt | awk '{gsub("|",RS);print}' > /home/tmp/temp.txt 

它根本不工作。 我想把所有的豎條都換成新的行,但我無法實現。請幫我解決一下這個。由於

回答

4

你可以做所有的替換在這樣一個AWK:

awk '{gsub(/[*~|]/, RS)} 1' /home/tmp/temp1.txt 

管道否則用於需要轉義正則表達式交替。但是,在字符類[...]內或管道或星號不需要如上所示轉義。

gsub函數中使用/.../正則表達式字面值代替引用字符串也更好。

+1

感謝@anubhava。它爲我工作.. – User122113

+3

只是說'awk'{gsub(「\\ |」,RS)} 1''或'awk'{gsub(/ \ | /,RS)} 1''或'awk' {gsub(/ [|] /,RS)} 1''只適用於管道符號。 – anubhava

+1

感謝您的信息@anubhava。 – User122113

1

如果你真的只是想用換行來代替豎線,你可以做更簡潔與tr那麼多的翻譯字符:

echo "hi|there|my|friend" | tr '|' '\n' 
hi 
there 
my 
friend 

或者,如果您使用的是文件:

tr '|' '\n' < /home/tmp/temp.txt