我有rpm
个文件,例如abc_defg_hijd-3.29.0-2_el6_11h.txt
。
我需要解析上述文本的第二个下划线_
和第一个连字符-
之间的单词,
所以所需的输出为hijd
。
我能够用上面的sed
来解析上面的内容,但它只适用于上面的例子,我的文件名稍有不同,因此我想在第二个下划线和第一个之间明确解析连字符。
答案 0 :(得分:3)
使用此sed命令(在Mac上):
sed -E 's/^[^_]*_[^_]*_([^-]*)-.*$/\1/'
OR(在Linux上):
sed -r 's/^[^_]*_[^_]*_([^-]*)-.*$/\1/'
使用awk:
awk -F '_' '{sub(/-.*$/, "", $3); print $3}'
答案 1 :(得分:3)
$ foo='abc_defg_hijd-3.29.0-2_el6_11h.txt'
$ bar=${foo%%-*} # remove everything after the first -
$ bar=${bar#*_}; bar=${bar#*_} # remove everything before the second _
$ echo "${bar}"
hijd
答案 2 :(得分:2)
grep 诞生于提取:
grep -oP '[^_-]*_\K[^_-]*(?=-)'
例如
kent$ echo 'abc_defg_hijd-3.29.0-2_el6_11h.txt'|grep -oP '[^_-]*_\K[^_-]*(?=-)'
hijd
awk 是用于文本处理的核弹,但它确实可以杀死苍蝇:
awk -F- 'split($1,a,"_")&&$0=a[3]'
或更短(gawk):
awk -v FPAT="[^-_]*" '$0=$3'
例如
kent$ echo 'abc_defg_hijd-3.29.0-2_el6_11h.txt'|awk -F- 'split($1,a,"_")&&$0=a[3]'
hijd
kent$ echo 'abc_defg_hijd-3.29.0-2_el6_11h.txt'|awk -v FPAT="[^-_]*" '$0=$3'
hijd
答案 3 :(得分:0)
GNU sed
echo 'abc_defg_hijd-3.29.0-2_el6_11h.txt' |
sed 's/\([^_]\+_\)\{2\}\([^-]\+\)-.*/\2/g'
hijd
答案 4 :(得分:0)
windows批处理:
for /f "tokens=3delims=_-" %%i in ("abc_defg_hijd-3.29.0-2_el6_11h.txt") do echo %%i
hijd