我的输入是test.txt,其中包含以下格式的数据:
'X'=>'ABCDEF',
'X'=>'XYZ',
'X'=>'GHIJKLMN',
我想得到类似的东西:
'ABCDEF',
'XYZ',
'GHIJKLMN',
我该如何在bash中解决这个问题?
谢谢!
答案 0 :(得分:1)
如果输入中的“胖箭头”中从未包含字符>
,则可以使用cut
:
cut -f2 -d\> file
-d
指定分隔符,此处为>
(防止外壳程序将其解释为重定向操作符所需的反斜杠)-f
指定要提取的字段答案 1 :(得分:1)
这是使用sed的解决方案:
curl -sL https://git.io/fjeX4 | sed 's/^.*>//'
Sed传递了一个命令:s ///。是一个正则表达式,它匹配从行(^)到最后一个'>'的任何字符(。*)。是一个空字符串,因此本质上sed只是删除了行中的所有字符,直到最后一个>。与其他解决方案一样,此解决方案假定行上只有一个'>'。
答案 2 :(得分:0)
如果数据确实是统一的,那么您可以运行cut(在example input上):
$ curl -sL https://git.io/fjeX4 | cut -d '>' -f 2
'ABCDEF',
'XYZ',
'GHIJKLMN',
您可以在explainshell上看到标志说明。
使用awk时,它看起来类似于:
$ curl -sL https://git.io/fjeX4 | awk -F '>' '{ print $2 }'
'ABCDEF',
'XYZ',
'GHIJKLMN',
答案 3 :(得分:0)
使用awk
awk 'BEGIN{FS="=>"}{print $2}' file
'ABCDEF',
'XYZ',
'GHIJKLMN',
awk中的 FS
代表字段分隔符。 BEGIN
中的代码仅在开始时执行,即在处理第一条记录之前执行。 $2
打印第二个字段。
放置上述内容的一种更惯用的方式是
awk 'BEGIN{FS="=>"}$2' file
'ABCDEF',
'XYZ',
'GHIJKLMN',
awk
中的默认操作是打印记录。在这里,我们明确提及要打印的内容。即$2
。