linux - 如何将行号变量传递给 sed,以删除该行之后的所有行
问题描述
我无法在 bash 脚本中将此变量传递给 sed。按照这种语法,我能够成功地完成我所要求的相反操作(删除指定行号之前的所有行)。
sed "1,${line_number}d"
但是尝试重新创建一个类似的答案以在行号连续给我错误之后删除所有行。我试过以下:
sed "${line_number},$d" #results in unexpected comma
sed "|${line_number}|,|$d|" #trying to use a separator gives me an error for missing command
我不确定为什么第一个会起作用,而第二个不会。任何帮助表示赞赏!
解决方案
sed "${line_number},$d"
第二个$
也是由 bash 解释的。Bash 看到$d
并扩展它,如果你没有给d
. 您有效地执行了类似sed '5,'
解释unexpected comma
.
要解决此问题,请转义第二个$
:
sed "$line_number,\$d"
顺便说一句,$line_number
您也可以提取$((line_number-1))
第一行,而不是删除从您开始的行,这可能更快:
head -n "$((line_number-1))"
推荐阅读
- laravel - 在 Laravel 应用程序中是否有指定的位置来存储帮助脚本?
- java - 如何使用 spring-data-elasticsearch 存储 java 枚举
- .net - Powershell 中的椭圆曲线秘密值推导原语 (ECSVDP-DH)
- java - 如何配置一尘不染的谷歌格式化程序来格式化大括号
- android - 如何从firebase实时数据库中的不同孩子获取值?
- html - 设计在不同的屏幕中破碎
- mysql - 如何使用 Google Cloud SQL 实例授权 circle-ci
- laravel - Laravel Voyager 管理面板(小编辑器)
- python - django中的整数错误(我认为它与那个新的外键有关)
- android - 为什么很多安卓应用的闪屏在点击返回键的时候没有关闭?