Linux 如何删除特定图案后的线条并提取内容
更新 这是我的档案:Linux 如何删除特定图案后的线条并提取内容,linux,bash,sed,awk,Linux,Bash,Sed,Awk,更新 这是我的档案: <department name="/fighters" id="123879" group="channel" case="none" use="no"> <options index_name="index.html" listing="0" sum="no" allowed="no" /> <target prefix="ttp" suffix=".net" /> <type="effort"> <
<department name="/fighters" id="123879" group="channel" case="none" use="no">
<options index_name="index.html" listing="0" sum="no" allowed="no" />
<target prefix="ttp" suffix=".net" />
<type="effort">
<region="20491" readonly="fs1a" readwrite="fs1a" upload="yes" download="yes" repl="yes" hard="0" soft"0" prio="0" write="no" stage="yes" migrate="no" size="0" >
<read="content" readwrite="content" hard="215822106624" soft="237296943104" prio="5" write="yes" stage="yes" migrate="no" size="0" />
<overflow name="20491-set-writable" />
</replicate>
<region="20576" readonly="fs1a" readwrite="fs1a" upload="yes" download="yes" repl="yes" hard="0" soft"0" prio="0" write="no" stage="yes" migrate="no" size="0" >
<read="content" readwrite="content" hard="215822106624" soft="237296943104" prio="5" write="yes" stage="yes" migrate="no" size="0" />
<overflow name="20576-set-writable" />
</replicate>
</replication>
<user="T:106603" />
<user="T:123879" />
<user="test" />
<user="ele::123456" />
<user="company-temp" />
<user="companymw2" />
<user="bird" />
<user="coding11" />
<user="plazamedia" />
<allow go="123456=abcdefghijklmnopqrstuvwxyz" />
</department>
但想象一下结果是:
"T:106603" />
"T:123879" />
"test" />
"ele::123456" />
"company-temp" />
"companymw2" />
"bird" />
"coding11" />
"plazamedia" />
首先,我怎么能说在第二次“
”之后删除所有内容
其次,我怎样才能说提取“
之间的所有内容
我喜欢用sed
或awk
提前谢谢你试试这个
cut
cut -d'"' -f 2 test.xml
试试这个sed
带引号(“
):
不带引号(“
):
更新:
sed -e '/^<user/!{d}' -e '/^<user/s/^.*"\([^"]\+\)".*/\1/' test.xml
$ awk '/<user=/ && gsub(/<user=|\/>/,x)' file
"T:106603"
"T:123879"
"test"
"ele::123456"
"company-temp"
"companymw2"
"bird"
"coding11"
"plazamedia"
sed-e'/^如果你想摆脱管道中的sed
和cut
,有很多方法可以做到这一点,这取决于具体情况。对我来说最简单的方法似乎是
awk -F'"' '/<user=/ { print "\"$2\"" }' test.xml
awk-F'”/试试这个:
awk -F'"' '/<user=/{ print $2 }' file
awk-F'”/仅使用sed:
$ sed 's/^<user=\(.*"\).*/\1/' test.xml # With quotes
$ sed 's/^<user="\(.*\)".*/\1/' test.xml # Without quotes
$sed/^试试看:
sed -e '/^<user/!{d}' -e '/^<user/s/^.*"\([^"]\+\)".*/\1/' test.xml
$ awk '/<user=/ && gsub(/<user=|\/>/,x)' file
"T:106603"
"T:123879"
"test"
"ele::123456"
"company-temp"
"companymw2"
"bird"
"coding11"
"plazamedia"
$awk'/使用gnu grep
grep -Po 'user=\K"[^"]*"' file
有几行完整的输出将有助于优化答案。@Ben Whaley I更新it@MortezaLSC,发布test.xml
的示例数据,您的预期输出是什么?@sat我的预期输出有两个:首先,使用cut
命令发布结果(我希望使用sed和awk执行)///secong删除所有”
从输出…或提取之间的所有内容。“
我有一个大文件..如何继续awk
?任何使用sed
的解决方案?@MortezaLSC您可以使用sed
,但是在这种情况下,与这个非常简单的awk
@MortezaLSC Mysed
相比,它会更复杂,更难理解,但是您可以尝试类似sed-n'/^\的东西,应该是sed-n”的/^
$ awk '/<user=/ && gsub(/<user=|\/>/,x)' file
"T:106603"
"T:123879"
"test"
"ele::123456"
"company-temp"
"companymw2"
"bird"
"coding11"
"plazamedia"
grep -Po 'user=\K"[^"]*"' file