linux - 如果第一行与模式匹配,则 Sed 在文件的第一行插入字符串
问题描述
我有一个sed
问题在任何地方都找不到答案:
我有一堆文件,其中一些以字符串开头,###
有些则没有。在每个以我开头的文件中,###
我想在当前第一行之前插入一些多行字符串。
fe 如果文件看起来像
### the first line
abc cba jfkdslfjslkd
我希望在顶部插入多行字符串
my
multi
line
string
### the first line
abc cba jfkdslfjslkd
文件中的任何其他内容都不应被修改。
如果一个文件没有开始,###
那么我不想编辑它。
解决方案
使用 sed
首先让我们定义你的字符串:
$ s='my\nmulti\nline\nstring\n\n'
现在,让我们运行一个 sed 命令:
$ sed "1s/^###/$s&/" File
my
multi
line
string
### the first line
abc cba jfkdslfjslkd
这个怎么运作:
1s/old/new/
替代但仅当出现new
在第一行时。old
old
1s/^###/$s&/
如果第一行以 . 开头,则替换$s
前面 的字符串。###
###
警告: 字符串s
不应包含任何 sed-active 字符。如果字符串s
不受您的控制,则这是违反安全规定的。
使用 awk
awk 对变量进行了合理的处理,从而避免了安全问题。
$ s='my\nmulti\nline\nstring\n'
$ awk -v string="$s" 'NR==1 && /^###/ {print string} 1' File
my
multi
line
string
### the first line
abc cba jfkdslfjslkd
推荐阅读
- electron - 如何防止任务管理器关闭电子应用程序
- typescript - 初始化条带变量后如何更改条带区域设置
- python - 为什么 scipy.stats.gamma.pdf 返回一个 0 数组?
- python - Django 错误:'list_filter[2]' 的值引用了 'is_active',它不引用字段。?
- laravel - 将数据从一个表移动到另一个表时数组到字符串的转换错误
- c++ - CreateProcess 总是失败
- c# - 异步任务处理器
- java - Selenium 代码 (CUCUMBER) 未在 Intellij IDEA 上执行
- c++ - 来自枚举/类的 doxygen 引用到文件中的函数
- python - Python Pandas 根据另一个单元格中的值检查列中的单元格值