【发布时间】:2021-11-17 23:55:27
【问题描述】:
如何在此 SED 语句中的 - 之间获取文本?
通过
sed -n 's/.* - \\([^.]*\\).*/\\1/p'
文件内容
2021-08-25_@lumpsum_7000607227442711813 - App-using - ZMRUGEoLc_.mp4
实际
ZMRUGEoLc_
想要的(没有开始和结束的空格)
App-using
【问题讨论】:
如何在此 SED 语句中的 - 之间获取文本?
通过
sed -n 's/.* - \\([^.]*\\).*/\\1/p'
文件内容
2021-08-25_@lumpsum_7000607227442711813 - App-using - ZMRUGEoLc_.mp4
实际
ZMRUGEoLc_
想要的(没有开始和结束的空格)
App-using
【问题讨论】:
使用sed,您可以使用
sed -n 's/.* - \(.*\) - .*/\1/p' file
这里,.* - \(.*\) - .* 匹配任何文本,空格+-+空格,捕获直到空格+-+空格的任何文本,然后匹配字符串的其余部分。整个匹配被捕获的值替换并打印该值。
#!/bin/bash
s='2021-08-25_@lumpsum_7000607227442711813 - App-using - ZMRUGEoLc_.mp4'
sed -n 's/.* - \(.*\) - .*/\1/p' <<< "$s"
# => App-using
使用awk,您可以使用
awk -F' - ' '{print $2}' file
#!/bin/bash
s='2021-08-25_@lumpsum_7000607227442711813 - App-using - ZMRUGEoLc_.mp4'
awk -F' - ' '{print $2}' <<< "$s"
# => App-using
这里,字段分隔符模式设置为空格+-+空格并打印字段 2。
【讨论】:
您可以使用此sed 来提取匹配项
sed -E 's/.[^A-Z]*(.[^ ]*).*/\1/' input_file
sed -E 's/.*- (.[^ ]*) .*/\1/' input_file
输出
$ sed -E 's/.[^A-Z]*(.[^ ]*).*/\1/' input_file
App-using
【讨论】: