2012-04-24 20 views
1

設A另一個字替換的單詞,B,C,d是詞語正則表達式與在同一行上的unix

輸入文件:

.. 
A/B/C/D 
W/B/C/Z 
L/B/C/O 
.. 

輸出文件:

.. 
A/B/C/A 
W/B/C/W 
L/B/C/L 
.. 

替換word Dword A只有一行相同,只有當/B/C/定界符存在於行中並且像其他行一樣明智

任何sed/awk/perl oneliner要完成該操作

回答

2

你可以這樣做:

sed -re 's/^([^/]*)(\/B\/C\/)([^/]*)$/\1\2\1/' file 

演示:

$ cat file 
A/B/C/D 
W/B/C/Z 
L/B/C/O 

$ sed -re 's/^([^/]*)(\/B\/C\/)([^/]*)$/\1\2\1/' file 
A/B/C/A 
W/B/C/W 
L/B/C/L 
+0

感謝您的答案!但對不起,我的問題會誤導你!你可以再次檢查問題! – user1228191 2012-04-24 09:48:28

+0

@ user1228191:我改變了答案。 – codaddict 2012-04-24 09:58:43

+0

完美!再次感謝:) – user1228191 2012-04-24 10:06:51

1

這應該是關鍵。 的perl -p -e 'S/d/A/G'

在sed SED -e 'S/d/A /'

+2

**的perl -p -e的#^(\ w +)(/ B/C /)\ w + \ S * $# \ 1 \ 2 \ 1#'** – tuxuday 2012-04-24 09:52:38

2
pearl.306> echo "A/B/C/D"|awk '{split($0,a,"/");print a[1]"/"a[2]"/"a[3]"/"a[1]}' 
A/B/C/A 
pearl.307> 

另一種方式是:

pearl.309> echo "A/B/C/D" | awk -F"/" '{OFS="/"}{$NF=$1;print}' 
A/B/C/A 
pearl.310> 

pearl.318> cat file1 
A/B/C/D 
W/B/C/Z 
L/B/C/O 
pearl.319> awk -F"/" '{OFS="/"}{$NF=$1;print}' file1 
A/B/C/A 
W/B/C/W 
L/B/C/L 
pearl.320> 
+0

我們可以使用分隔符對整個文件執行此操作!你可以請再次檢查我的問題 – user1228191 2012-04-24 09:52:10

+0

是的當然..看我的編輯 – Vijay 2012-04-24 10:02:25

3

這是一個awk解決方案:

awk -F/ -v OFS=/ '$2=="B" && $3=="C" {$4=$1}1' input.txt 
2

這可能會爲你工作:

sed 's|^\(\(.\)/B/C/\).|\1\2|' file 

如果A/B/C/D是真實的話如wordA/wordB/wordC/wordD,則:

sed 's/|^\(\([^/]*\)/wordB/wordC/\).*|\1\2|' file  
0
perl -pe 's#(/B/C/)(.*)#$1$`#' file 

這應該工作+

相關問題