簡體   English   中英

正則表達式,用同一行unix上的另一個單詞替換一個單詞

[英]Regular expression to replace a word with another word on the same line unix

令A,B,C,D為單詞

輸入文件 :

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

輸出文件:

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

僅在一行中存在/B/C/分隔符的情況下,在同一行中用word A替換word D ,對於其他行也是如此

任何sed/awk/perl oneliner都能實現

這是一個awk解決方案:

awk -F/ -v OFS=/ '$2=="B" && $3=="C" {$4=$1}1' input.txt
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> 

你可以做:

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

這可能對您有用:

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

如果A/B/C/D是真實單詞,例如wordA/wordB/wordC/wordD ,則:

sed 's/|^\(\([^/]*\)/wordB/wordC/\).*|\1\2|' file    

這應該可以解決問題。 perl -p -e's / D / A / g'

in sed sed -e's / D / A /'

 perl -pe 's#(/B/C/)(.*)#$1$`#' file

這應該工作+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM