2013-03-06 178 views
1

我有一些字符串,如:替換模式命令

樣品輸入:

Also known as temple of the city, 
xxx as Pune Banglore as kolkata Delhi India, 
as Mumbai India or as Bombay India, 
Calcutta,India is now know as Kolkata,India, 

從上面我想爲XXX XXXX的XX,轉換爲爲xxx_xxxx_xx,它應在最後後生效。

示例輸出以上:

Also known as temple_of_the_city, 
xxx as Pune Banglore as kolkata_Delhi_India, 
as Mumbai India or as Bombay_India, 
Calcutta,India is now know as Kolkata,India, 

有應該是最後作爲行之後沒有空格隔開字符串。

請讓我知道,如果它不明確。 謝謝

+0

沒有第二個'xxx'在輸出的第二行從哪兒來的? – 2013-03-06 19:51:39

+0

對不起,我編輯過它。 – par181 2013-03-06 19:53:29

回答

2

保羅是對的,這不是一個簡單的任務。這是一個sed的解決方案,我放在一起:

sed 's/\(.*as \)/\1\n/;h;y/ /_/;G;s/.*\n\(.*\)\n\(.*\)\n.*/\2\1/' file.txt 

演示您的數據:

$ echo 'Also known as temple of the city, 
> xxx as Pune Banglore as kolkata Delhi India, 
> as Mumbai India or as Bombay India, 
> Calcutta,India is now know as Kolkata,India,' | \ 
> sed 's/\(.*as \)/\1\n/;h;y/ /_/;G;s/.*\n\(.*\)\n\(.*\)\n.*/\2\1/' 
Also known as temple_of_the_city, 
xxx as Pune Banglore as kolkata_Delhi_India, 
as Mumbai India or as Bombay_India, 
Calcutta,India is now know as Kolkata,India, 
+0

@zzk'echo「她長達兩個小時」| sed's /\(.* as \)/ \ 1 \ n /; h; y//_/;G;s/.*\n\(.*\)\n\(.*\)\n 。*/\ 2 \ 1 /''在'GNU sed'上對我有效。 – 2013-03-06 20:20:02

+0

當我將其複製到我的終端時,可能會發生一些微妙的變化。無論如何。 – zzk 2013-03-06 20:22:47

+0

@zzk如果你有任何機會在Mac上,這將解釋它。 'sed'在OS X中的工作方式不同。 – 2013-03-06 20:24:02

1

我會傾向於使用瑞士軍隊的電鋸Perl,但sed也是一種選擇。無論哪種情況,您都在尋找實質性的學習曲線。

您所描述的替換可能非常複雜,以至於您最好寫一個腳本,而不是嘗試將它作爲一個班輪。

如果你要編寫一個腳本並且不知道Perl,沒有理由不選擇你選擇的腳本語言(python,ruby等),只要它有某種文本模式匹配語法。

我不知道做一個複雜的模式匹配和替換這種簡單,淺學習曲線的方法。這是一次性的事情,你只需要做這個替換?或者你將來會做類似的複雜模式替換。如果你經常這樣做,你應該花時間學習一些腳本語言,但是我不會把你的Perl偏見強加給你。只需選擇任何似乎可以訪問的語言。