使用sed匹配模式并从行中删除到文件末尾

Alb*_*t H 21 regex unix linux bash sed

我正在尝试匹配来自管道输入和/或文件的模式,然后从匹配的行中删除到文件的末尾,包括.我到处寻找,但似乎找不到符合我需要的表达方式.

以下表达式允许我删除到流的开头,包括匹配的模式:

sed -e '1,/Files:/d'
Run Code Online (Sandbox Code Playgroud)

给出一些样本数据:

Blah blah blah
Foobar foo foo
Files:
 somefiles.tar.gz 1 2 3
 somefiles.tar.gz 1 2 3

-----THIS STUFF IS USELESS-----
BLEH BLEH BLEH
BLEH BLEH BLEH
Run Code Online (Sandbox Code Playgroud)

运行上面的表达式会产生:

Files:
 somefiles.tar.gz 1 2 3
 somefiles.tar.gz 1 2 3

-----THIS STUFF IS USELESS-----
BLEH BLEH BLEH
BLEH BLEH BLEH
Run Code Online (Sandbox Code Playgroud)

我想达到类似的效果,但方向相反.使用前一个表达式的输出,我想删除-----THIS STUFF IS USELESS-----文件的末尾,包括.它应该产生(在经过第一个表达式之后):

Files:
 somefiles.tar.gz 1 2 3
 somefiles.tar.gz 1 2 3
Run Code Online (Sandbox Code Playgroud)

我也愿意使用任何其他工具,只要它可以在任何其他POSIX系统上使用,并且不使用特定于版本(例如GNU特定)的选项.

实际文本可以在这里找到:http://pastebin.com/CYBbJ3qr 注意从更改-----THIS STUFF IS USELESS----------BEGIN PGP SIGNATURE-----.

she*_*ter 34

为什么不

 sed '/^-----THIS STUFF IS USELESS-----$/,$d' file
Run Code Online (Sandbox Code Playgroud)

在您使用的范围表达式中,',$'将指定"到文件的末尾"

1 is first line in file, 
$ is last line in file.
Run Code Online (Sandbox Code Playgroud)

产量

Files:
 somefiles.tar.gz 1 2 3
 somefiles.tar.gz 1 2 3
Run Code Online (Sandbox Code Playgroud)


有了GNU sed,你可以做到

sed '/^-----THIS STUFF IS USELESS-----$/Q' file
Run Code Online (Sandbox Code Playgroud)

where Qqquit命令类似,但不打印匹配行

  • 因为你的目标表达式中有一个`/`字符,你需要使用不同的reg-exp分隔符和前端和末尾,即`sed'@ <! - #content end - > </ div> @, $'档案'.有些sed要求如果你不使用`/`那么你就是esacpe那个char,即'sed'\ @ ..... @'文件(第二个没有转义).你应该在这里发布这类问题.祝好运. (2认同)

Ed *_*ton 5

不要试图弄清楚如何表达你不想要的东西,只需打印你想要的东西:

awk -v RS= '/Files:/' file
Run Code Online (Sandbox Code Playgroud)

编辑:鉴于您修改后的输入:

awk '/^Files:$/{f=1} f; /^$/{f=0}' file
Run Code Online (Sandbox Code Playgroud)

或者:

awk '/^Files:$/{f=1} f; /^-----THIS STUFF IS USELESS-----$/{f=0}' file
Run Code Online (Sandbox Code Playgroud)

若你宁可。

您还可以使用以下任一方法:

awk '/^Files:$/,/^-----THIS STUFF IS USELESS-----$/' file
sed '/^Files:$/,/^-----THIS STUFF IS USELESS-----$/' file
Run Code Online (Sandbox Code Playgroud)

但是以后很难扩展。