bash - sed 使用美元符号进行环境变量和行尾模式匹配
问题描述
中sed
,我们使用双引号来读取由美元符号表示的环境变量,如果我想同时使用美元符号作为行尾模式该怎么办?
这是我的命令示例(不工作),
cat inputfile | xargs -n4 sh -c 'sed -ne "$1,$2p" bigfile|sed -e "$s/$/\n+--$3-----+/" > $0.outputfile'
我通过管道传输输入文件的内容(包含输出文件名、目标行号(开始和结束)以及要添加到每个文件的一些标签),xargs
将大文件分成更小的文件。输入文件示例:
dataA
59
88
sometagA
dataB
91
236
sometagB
....
在第二个sed
命令中:sed -e "$s/$/\n+--$3-----+/"
,$3
是来自 的环境变量xargs
,我想分别使用其他 $s 和 $ 来定位文件结尾和行尾模式,因为我打算在每个输出文件中插入一些标签。我不能同时使用单引号和双引号,因为外部xargs
已经使用了单引号。
解决方案
使用反斜杠从 shell 中转义美元符号。
xargs -n4 sh -c 'sed -ne "$1,$2p" bigfile |
sed -e "\$s/\$/\n+--$3-----+/" > "$0".outputfile' <inputfile
你只传递了四个参数,它们从零开始编号,所以我猜你的意思是$3
,不是$4
。
还要注意如何避免无用的cat
.
这两个sed
脚本可能会合并成类似的东西
sed -n "$1,$2!d;$2{;s/\$/+--$3-----+/p;q;}p"
推荐阅读
- python - 如何使用 Seaborn 连接两列以在箱线图中显示为一列?
- algorithm - 识别不变量
- java - 使用 createQuery()、参数和 executeUpdate() 模拟 Hibernate entityManager
- mysql - My-Sql 中的窗口化功能无法按预期工作
- spring-boot - 我可以将杰克逊和 xstream 序列化程序用于跨多个服务的相同事件吗
- python - 在 python 中编写一个“审查”函数
- vim - 如何在vim的当前选项卡中切换所有窗口上的行号,除了NerdTree?
- semantic-web - 使用 JSON-LD 将遗留 JSON 文档转换为 RDF 知识时假设 IRI
- python - dask 处理延迟故障
- angular - 如何在 Angular 10 中访问此数组中的特定数据?