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 My
sed
相比,它会更复杂,更难理解,但是您可以尝试类似
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