我正在寻找一个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
答案 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