1

我有一个如下所示的 csv 文件:

"foo","bar","lorem","ipsum"
"foo"."bar","XX lorem","ipsum"

我需要在以“xx”结尾的字段中转换以“xx”开头的字段:

"foo","bar","lorem","ipsum"
"foo"."bar","lorem xx","ipsum"

sed(或 awk)可以帮助我吗?(“xx”是一个字符串而不是一个正则表达式结果)

4

2 回答 2

4
sed -r 's/XX ([^"]+)/\1 XX/' filename
于 2013-03-22T17:55:02.357 回答
4
sed -r 's/"(XX) ([^"]*)"/"\2 \1"/g'

测试:

kent$  echo '"foo","bar","lorem","ipsum XX"
"foo"."XX bar","XX lorem","ips XX um"'|sed -r 's/"(XX) ([^"]*)"/"\2 \1"/g'
"foo","bar","lorem","ipsum XX"
"foo"."bar XX","lorem XX","ips XX um"

注意

  • 这将对所有以 XX 开头的字段执行此逻辑。
  • XX 在字段中,但不是在起点,将被忽略(参见上面的示例)
  • !!!如果 XX 在正则表达式中有具有特殊含义的字符,则该命令可能会失败。例如,如果 XX 是.*
于 2013-03-22T17:59:41.097 回答