AWK - SED - 如果以数字开头,则在每列的开头添加一个字符

nat*_*ath 5 sed awk text-processing

如何在以数字开头的每列的开头添加一个字符:

添加 ac的示例:
4 r4 8 8 4

所以我得到这个输出:
c4 r4 c8 c8 c4

它应该适用于可变数量的列。

Mar*_*uet 11

您可以使用一次修改每一列:

sed -E 's/(^| )([[:digit:]])/\1c\2/g' input
Run Code Online (Sandbox Code Playgroud)

(^| )如果您的字段分隔符不是空格,请将正则表达式这部分中的空格替换为您的字段分隔符。

  • -E指定使用扩展正则表达式 (ERE) 而不是基本正则表达式 (BRE)
  • s:s/regexp/replacement/
  • (^| )匹配捕获组中行的开头或空格
  • ([[:digit:]])匹配捕获组中的数字
  • \1c\2第一个捕获组的内容 ( \1)、字符c、第二个捕获组的内容 ( \2)
  • g全球

一旦结果令您满意并且您的sed实现支持它,您可以添加-i-i ''在 FreeBSD 或诸如 macos 等衍生版本上)来就地修改文件。(-i.bak如果您想备份原始文件)


Bog*_*Bog 5

我会使用awk这样的 -oneliner:

  • echo '4 r4 8 8 4' | awk '{ for (i=1; i<=NF; i++) if ($i ~ /^[0-9]/) $i = "c" $i }1'

希望有帮助:)