如何使用sed替代cut打印CSV指定行的第2、3列并插入连接内容
实现方案
直接用sed的分组替换能力即可实现需求,无需额外管道调用其他工具,可直接替换原有逻辑的命令如下:
sed -n "$2 { s/^[^;]*;\([^;]*\);\([^;]*\);.*/\1 is \2/p }" players.csv
命令说明
-n参数关闭sed默认的行输出逻辑,仅打印符合条件的内容"$2 {}"限定仅对第二个参数传入的行号对应的行执行大括号内的操作- 替换规则
s/匹配规则/替换内容/p的逻辑:- 用
[^;]*匹配单个列的内容(所有非分隔符;的字符) - 用
\(和\)对第二列、第三列分别做分组捕获 - 替换时用
\1调用第二列的捕获内容,\2调用第三列的捕获内容,中间插入要求的is字符串 - 末尾的
p表示替换完成后打印该行内容
- 用
如果希望保留原有管道调用的结构,替换cut部分的sed命令如下:
sed -n "$2p" players.csv | sed 's/^[^;]*;\([^;]*\);\([^;]*\);.*/\1 is \2/'
内容的提问来源于stack exchange,提问作者heyman
相关产品推荐
相关产品推荐

