1

让 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 
..

仅当行中存在定界符且其他行同样明智时,将其替换为word D同一word A/B/C/

任何sed/awk/perloneliner来实现这一点

4

6 回答 6

3

这是一个awk解决方案:

awk -F/ -v OFS=/ '$2=="B" && $3=="C" {$4=$1}1' input.txt
于 2012-04-24T10:11:21.833 回答
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> 
于 2012-04-24T09:39:39.563 回答
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
于 2012-04-24T09:40:06.547 回答
2

这可能对您有用:

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

如果A/B/C/D是真实的单词,例如wordA/wordB/wordC/wordD,那么:

sed 's/|^\(\([^/]*\)/wordB/wordC/\).*|\1\2|' file    
于 2012-04-24T10:11:41.907 回答
1

这应该可以解决问题。perl -p -e 's/D/A/g'

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

于 2012-04-24T09:39:38.370 回答
0
 perl -pe 's#(/B/C/)(.*)#$1$`#' file

这应该工作+

于 2013-04-18T10:41:34.593 回答