我有一个包含一些数字和字母的文件,例如:
输入:
9(9)S99
D9(9)L9(9)
G999N9(9)
99C99
我需要将所有数字(在本例中为9)替换为 X ,但括号内的数字除外,例如:
输出:
X(9)SXX
DX(9)LX(9)
GXXXNX(9)
XXCXX
使用sed,grep还是awk在bash中是否可行? 在此先感谢您的帮助。
答案 0 :(得分:4)
将GNU awk用于多字符RS:
$ cat file
9(9)S99
D9(999)L9(9)
G999N9(9)
99C99
$ gawk -v RS='[()]' '{ORS=RT} NR%2{gsub(/[[:digit:]]/,"X")} 1' file
X(9)SXX
DX(999)LX(9)
GXXXNX(9)
XXCXX
以上假设您的parens总是以非嵌套对的形式出现,例如:你不能拥有(( ... )
答案 1 :(得分:1)
通过perl,
$ perl -pe 's/(?<!\()9/X/g' file
X(9)SXX
DX(9)LX(9)
GXXXNX(9)
XXCXX