我有包含文本的文件:
1861_ASSET-D_T_201702181000-201702181045_HN_
197895_STRING-H_T_201702181000-201702181045_HN_
14512861_FILE-FD_T_201702181000-201702181045_HN
如何使用 egrep、awk 或 sed 在第一个和第二个匹配“_”之间分配文本?
我希望有:
ASSET-D
STRING-H
FILE-FD
答案1
$ sed -r 's/[^_]+_([^_]+)_.*/\1/' file
ASSET-D
STRING-H
FILE-FD
解释
-r
使用 EREs/old/new/
old
用。。。来代替new
[^_]+
一些非下划线的字符(some chars)
留着some chars
以后用.*
任意数量的任意字符\1
已保存的模式
答案2
您可以使用awk
以下参数:
-F "_"
- 用作_
分隔符'{print $2}'
- 打印第二个元素$ awk -F "_" '{print $2}' input_file ASSET-D STRING-H FILE-FD
答案3
如果您想允许其他工具,cut
最简单的解决方案是:
cut -d _ -f 2 < input.txt > output.txt
答案4
用python单行代码来说:
python3 -c "[print(l.split('_')[1]) for l in open('f')]"
'f'
您的文件在哪里,用引号括起来,例如:
python3 -c "[print(l.split('_')[1]) for l in open('/home/jacob/blub')]"
ASSET-D
STRING-H
FILE-FD
解释
for l in open('f')
读 f每行, 和
l.split('_')[1]
按分隔符 分割行_
,保留第二个字符串(索引[1]
,其中[0]
是第一个。
print(l.split('_')[1])
随后打印找到的字符串。