sed - 只获取中间没有空格的文本

sed - get only text in between without spaces

如何获取此 SED 语句中 - 之间的文本?

通过

sed -n 's/.* - \([^.]*\).*/\1/p'

文件内容

2021-08-25_@lumpsum_7000607227442711813 - App-using - ZMRUGEoLc_.mp4

实际

ZMRUGEoLc_

想要(没有开头和结尾space)

App-using

有了sed,就可以用

sed -n 's/.* - \(.*\) - .*//p' file

这里,.* - \(.*\) - .*匹配任意文本,space+-+space,捕获任意文本,最大为space+- +space 然后匹配字符串的其余部分。整个匹配被替换为捕获的值并打印该值。

参见 online demo:

#!/bin/bash
s='2021-08-25_@lumpsum_7000607227442711813 - App-using - ZMRUGEoLc_.mp4'
sed -n 's/.* - \(.*\) - .*//p' <<< "$s"
# => App-using

使用 awk,您可以使用

awk -F' - ' '{print }' file

this online demo:

#!/bin/bash
s='2021-08-25_@lumpsum_7000607227442711813 - App-using - ZMRUGEoLc_.mp4'
awk -F' - ' '{print }' <<< "$s"
# => App-using

此处,字段分隔符模式设置为space+-+space并打印字段2。

您可以使用此 sed 来提取匹配项

sed -E 's/.[^A-Z]*(.[^ ]*).*//' input_file
sed -E 's/.*- (.[^ ]*) .*//' input_file

输出

$ sed -E 's/.[^A-Z]*(.[^ ]*).*//' input_file
App-using