Bash 删除行的第一部分
给定以下文件Bash 删除行的第一部分,bash,sed,Bash,Sed,给定以下文件 $cat a.txt 敏捷的棕色狐狸跳过了懒狗 我可以使用sed $ sed 's/.*fox//' a.txt jumps over the lazy dog 我试图巧妙地使用D选项 D删除模式空间中的第一条嵌入换行符。 范例 $ sed 's/fox/\n/; D' a.txt 但是,这没有输出。是否可以使用类似于我所尝试的D选项,使用sed删除行的第一部分 如果fox之前的零件比fox之后的零件短,则此操作有效 $ sed 's/fox/\r/' a.txt ju
$cat a.txt
敏捷的棕色狐狸跳过了懒狗
我可以使用sed
$ sed 's/.*fox//' a.txt
jumps over the lazy dog
我试图巧妙地使用D
选项
D删除模式空间中的第一条嵌入换行符。
范例
$ sed 's/fox/\n/; D' a.txt
但是,这没有输出。是否可以使用类似于我所尝试的D
选项,使用sed
删除行的第一部分
如果fox之前的零件比fox之后的零件短,则此操作有效
$ sed 's/fox/\r/' a.txt
jumps over the lazy dog
一种方法是:
sed '/fox/{s/fox/\n/;D}' input
以下是完整的帮助文本: 删除模式空间中直到第一个换行的文本。如果有文本 左,使用生成的模式空间重新启动循环(无 读取新的输入行),否则开始正常的新循环 您的示例不起作用,因为
D
将重新启动循环并不断删除行,直到什么都没有留下
如果您确实想使用D
,perreal的答案就可以了,或者您可能更喜欢使用条件分支(t
或仅GNUt
)。以下是GNU和BSD兼容的版本:
解析
按如下方式运行:
sed -f parse.sed a.txt
输出:
jumps over the lazy dog
这可能适用于您(GNU-sed):
如果fox之前的零件比fox之后的零件短,则此操作有效
$ sed 's/fox/\r/' a.txt
jumps over the lazy dog
$sed's/fox/\r/'a.txt
跳过懒狗
sed 's/fox/\n/;T;D' file