Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linux命令/脚本上使用sed、awk或grep从文件中获取值?_Linux_Shell_Awk_Sed_Grep - Fatal编程技术网

如何在linux命令/脚本上使用sed、awk或grep从文件中获取值?

如何在linux命令/脚本上使用sed、awk或grep从文件中获取值?,linux,shell,awk,sed,grep,Linux,Shell,Awk,Sed,Grep,我有一个值为的file1: <action> <row> <column name="book" label="book">stick man (2020)/</column> <column name="referensi" label="referensi"> http://172.22.215.234/Data/Book/Journa

我有一个值为的file1:

<action>
 <row>
    <column name="book" label="book">stick man (2020)/</column>
    <column name="referensi" label="referensi"> http://172.22.215.234/Data/Book/Journal/2016_2020/1%20Stick%20%282020%30/</column>
 </row>
<row>
    <column name="book" label="book">python easy (2019)/</column>
    <column name="referensi" label="referensi"> http://172.22.215.234/Data/Book/Journal/2016_2020/2%20Buck%20%282019%30/</column>
 </row>
</action>
我的代码:

grep -oP 'href="([^".]*)">([^</.]*)' file1
grep-oP'href=“([^.]*)”>([^

$awk-vrs=']+>'-NF{printf“%s”,$0(++c%2?”|“:ORS)}文件
木棍人(2020)/|http://172.22.215.234/Data/Book/Journal/2016_2020/1%20Stick%20%282020%30/
python easy(2019)/|http://172.22.215.234/Data/Book/Journal/2016_2020/2%20Buck%20%282019%30/
请注意,正斜杠位于原始数据中


需要多字符
RS
支持(GNU awk)。

使用
awk
您可以尝试:

awk -F'>|/<'  '{ORS= (NR == 3 || NR == 7) ? " |" : "\n"} $2 != "" {print $2}' file
stick man (2020) | http://172.22.215.234/Data/Book/Journal/2016_2020/1%20Stick%20%282020%30
python easy (2019) | http://172.22.215.234/Data/Book/Journal/2016_2020/2%20Buck%20%282019%30

awk-F'>|/|/。使用xmllint或xmlstarlet。使用支持xml的python ruby perl语言和其他支持xml的工具。可以编写
hxselect
命令来生成OP中显示的输出吗?我问,因为编码的示例只返回URL,而不是例如
stick man(2020)| http…
@user3439894我怀疑
hxselect
本身是否能够做到这一点,但是在使用该工具提取数据后,处理它应该相对容易。因此,如果我理解您在前面的评论中对我的问题的回答,并且使用OP中的数据,我必须调用
hxselect
两次,并使用额外的正常实用程序。如果是这样,那么不同的数据有许多目标,这不是一个非常实用的实用程序。无论如何,感谢您的回答,并且很高兴有另一个工具可以工作。显示的输出与OP中的示例输出不匹配。他正在寻找例如
stickman(2020)| http…
not
stickman(2020)/| http…
,注意到
/
后面的
/
是不需要的。I“我几乎可以肯定他的样本数据有复制/粘贴错误或打字错误。没有必要删除不存在的字符,因为在问题中没有提及对它们进行修剪。这完全基于OP中的示例,但我必须同意KamilCuk对OP的评论。是的,该工具或类似工具将是正确的方法。
<action>
 <row>
    <column name="book" label="book">stick man (2020)/</column>
    <column name="referensi" label="referensi"> http://172.22.215.234/Data/Book/Journal/2016_2020/1%20Stick%20%282020%30/</column>
 </row>
<row>
    <column name="book" label="book">python easy (2019)/</column>
    <column name="referensi" label="referensi"> http://172.22.215.234/Data/Book/Journal/2016_2020/2%20Buck%20%282019%30/</column>
 </row>
</action>
cat file.html | hxselect -i -c -s '\n' column[label=referensi]
$ awk -v RS='<[^>]+>' 'NF{printf "%s", $0 (++c%2?" |":ORS)}' file

stick man (2020)/ | http://172.22.215.234/Data/Book/Journal/2016_2020/1%20Stick%20%282020%30/
python easy (2019)/ | http://172.22.215.234/Data/Book/Journal/2016_2020/2%20Buck%20%282019%30/
awk -F'>|/<'  '{ORS= (NR == 3 || NR == 7) ? " |" : "\n"} $2 != "" {print $2}' file
stick man (2020) | http://172.22.215.234/Data/Book/Journal/2016_2020/1%20Stick%20%282020%30
python easy (2019) | http://172.22.215.234/Data/Book/Journal/2016_2020/2%20Buck%20%282019%30
awk -F'>|/<'  '{ORS= (NR%2) ? " |" : RS} $2 != "" {print $2}' file