Linux从命令行查找和替换

时间:2016-11-07 19:07:05

标签: regex linux sed command-line

我正在寻找一个linux命令行脚本来执行以下操作。

假设我有一个文件

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

对于以字母' C'开头的每一行,如果它有' WRIT11',请替换为' REPL11'

脚本后的文件

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

2 个答案:

答案 0 :(得分:1)

可以这样做:

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

说明:

开头的

s/search_this/replace_it_with_this/g用于搜索,最后的g表示全局,而不仅仅是一行。

在search_this部分中,\(\)中的部分可以在replace_it_with_this部分中写为\1

^C表示行的开头有一个C,后面的.表示任何字符,*表示前面的字符不会发生或不发生多次

答案 1 :(得分:0)

使用类似的东西:

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