2016-11-07 14 views
0

私は次のことを行うためのlinuxコマンドラインスクリプトを探しています。 Linuxコマンドラインからの検索と置換

は、私はそれがWRIT11」を持っている場合、

ファイルのスクリプトの後に 'REPL11' で置き換え、文字 'C' で始まるすべての行のためのファイル

ABC|1|READ11|Reading|1 
ABj|2|READ11|Reading|2 
CBD|3|WRIT11|Reading|3 
BCD|4|READ11|Reading|4 
CDE|5|WRIT11|Reading|5 
CBA|6|READ11|Reading|6 

があるとし

ABC|1|READ11|Reading|1 
ABj|2|READ11|Reading|2 
CBD|3|REPL11|Reading|3 
BCD|4|READ11|Reading|4 
CDE|5|REPL11|Reading|5 
CBA|6|READ11|Reading|6 

答えて

0

使用このような何か:

awk -F'|' '($1 ~ /^C.*$/) && ($3 =="WRIT11")      \ 
      {print $1"|"$2"|REPL11|"$4"|"$5; next;}{print;}' file 
+2

また、次のように書くこともできます。BEGIN {OFS = FS = "|"} $ 1〜/^C/&& $ 3 == "WRIT11" {$ 3 = "REPL11"} 1 'file' – sat

1

それは次のように行うことができます。

sed 's/\(^C.*\)WRIT11/\1REPL11/g' your_file 

は説明:最初に

s/search_this/replace_it_with_this/g sが検索され、最後にgがないだけで1ライン分、世界的に意味しています。

検索では、\(\)の部分は、replace_it_with_this部分に\1と書くことができます。

^Cは、行の先頭にCがあり、その後に続く文字がすべての文字を意味し、は、すべての文字が複数ではないことを意味します。

+2

'sed '/^C/s/WRIT11/REPL11 /' file' – SLePort

+0

非常に良い、ありがとう、@Kenavoz – fancyPants