Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 删除行的第一部分_Bash_Sed - Fatal编程技术网

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
或仅GNU
t
)。以下是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