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

行に区切り文字が存在し、他の行についても同様の場合にのみ、同じ行の 1 つに word D置き換えます。word A/B/C/

それsed/awk/perlを達成するためのワンライナー

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

これはあなたのために働くかもしれません:

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 に答える
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 に答える
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 に答える