bash - 替换不在括号中的数字?

标签 bash replace awk sed grep

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

输入:

9(9)S99
D9(9)L9(9)
G999N9(9)
99C99

我需要用 X 替换所有数字(在本例中为 9),括号内的数字除外,例如:

输出:

X(9)SXX
DX(9)LX(9)
GXXXNX(9)
XXCXX

在 bash 中使用 sed、grep 或 awk 是否可行?
预先感谢您的帮助。

最佳答案

将 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

上面假设你的 parent 总是以非嵌套的形式出现,例如你不能有 (( ... )

关于bash - 替换不在括号中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24871982/

相关文章:

linux - 将脚本作为 cron 作业运行不显示数据。

java - 字符串替换方法不替换字符

java - 替换字符串中的文本

regex - 带变量的 AWK 负正则表达式

linux - Bash printf 前缀

linux - 如何关闭 grep 行缓冲

bash - 使用 awk 或 bash 减去两列的值

unix - 删除具有特定图案的线条

linux - Bash,按大小将目录中的文件分成组(低性能)

mysql - SQL : replace string with value from a field (bulk edit)