我想更改文件中每一行的格式,并在其中一个匹配的组上运行另一个替换.
作为一个例子,我可以有一个简单的三列CSV文件(没有转义),我想放在另一种格式.
sed -r 's/^([a-z]+),([a-z]+),([a-z]+)$/\1: \3 (\2)'
# would turn "comma,separated,values"
# into "comma: values (separated)"
Run Code Online (Sandbox Code Playgroud)
不过,我也想从第二列中删除所有的元音,即运行s/[aeiou]//g上\2.
这个嵌套替换问题有一个很好的解决方案吗?请假设两个替换都很复杂,这只是一个例子.
我的sed不是GNU sed 4.0版.
我认为你最好选择awk这个,以便更容易地操纵字段。
echo "gaviidae,gruidae,picidae" | awk -F "," '{gsub(/[aeiou]/, "", $2); printf("%s: %s (%s)\n", $1, $3, $2)}'
Run Code Online (Sandbox Code Playgroud)
输出:
gaviidae: picidae (grd)
Run Code Online (Sandbox Code Playgroud)