如何替换括号内的一个字符,使其他所有内容保持原样

Max*_*ger 4 awk grep sed

数据如下:

There is stuff here (word, word number phrases)
(word number anything, word phrases), even more
...
Run Code Online (Sandbox Code Playgroud)

在不同的文件中有很多它们。也有不同类型的数据,它们周围的数据格式都不相同。括号内的数据无法更改,并且始终在同一行。我不必处理:

(stuff number,
maybe more here)
Run Code Online (Sandbox Code Playgroud)

我希望能够用逗号代替逗号

所需的输出将是

There is stuff here (word: word number phrases)
(word number anything: word phrases), even more
...
Run Code Online (Sandbox Code Playgroud)

ran*_*mir 5

假设括号内只有一个逗号需要替换,则此POSIX BRE sed表达式将用冒号替换它:

sed 's/(\(.*\),\(.*\))/(\1:\2)/g' file
Run Code Online (Sandbox Code Playgroud)

如果有多个逗号,则仅替换最后一个逗号。

在多个逗号场景中,您只能将第一个逗号替换为:

sed 's/(\([^,]*\),\([^)]*\))/(\1:\2)/g' file
Run Code Online (Sandbox Code Playgroud)


gle*_*man 5

这是awk的版本,它使用括号作为记录分隔符:

awk -v RS='[()]' 'NR%2 == 0 {sub(/,/,":")} {printf "%s%s", $0, RT}' file
Run Code Online (Sandbox Code Playgroud)

括号之间的内容将是每个偶数记录。该RT变量包含与RS该记录的模式匹配的字符。

请注意,这仅替换带括号的文本的第一个逗号。如果要全部替换,请使用gsub代替sub