更换不在括号中的数字?

时间:2014-07-21 18:19:27

标签: bash replace awk sed grep

我有一个包含一些数字和字母的文件,例如:

输入:

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中是否可行? 在此先感谢您的帮助。

2 个答案:

答案 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