2012-07-25 72 views
1

這是我的示例文件:XML每日新聞通過UNIX腳本/命令

<?xml version="1.0" encoding="UTF-8" ?> 
<testjar> 
<testable> 
    <trigger>Trigger1</trigger> 
    <message->2012-06-14T00:03.54</message> 
<sales-info> 
    <san-a>no</san-a> 
    <san-b>no</san-b> 
    <san-c>no</san-c> 
    </sales-info> 
    </testable> 
    </testjar> 

我需要從這個 -

例如提取XML標籤上述文件的輸出應是

testjar 
testable 
trigger 
message 
sales-info 
.... 

回答

3
$> cat ./text 
<?xml version="1.0" encoding="UTF-8" ?> 
<testjar> 
<testable> 
    <trigger>Trigger1</trigger> 
    <message>2012-06-14T00:03.54</message> 
<sales-info> 
    <san-a>no</san-a> 
    <san-b>no</san-b> 
    <san-c>no</san-c> 
    </sales-info> 
    </testable> 
    </testjar> 

而且

$> grep -P -o "(?<=\<)[^>?/]*(?=\>)" ./text 
testjar 
testable 
trigger 
message 
sales-info 
san-a 
san-b 
san-c 

正則表達式(?<=\<)[^>?/]*(?=\>)包括3個部分:

  • (?<=\<)(?<=)被回顧後操作者,所以它的意思是「之後<「;

  • [^>?/]*:不是>,?, / 0或更多次;

  • (?=\>)(?=)是向前看運營商,所以它

+0

你能解釋一下什麼是 '>' 的命令開始 「之前>」 的意思?即$>貓。 Пожалуйста。爲什麼你使用./這意味着執行,afaik。 – user907860 2012-07-25 08:39:35

+0

'$>'是我的bash PS1。它表明下面的行是shell查詢。 '。/'表示「當前目錄」⇒'。/ text'≡'text'。 – 2012-07-25 09:07:16

+0

適合我。謝謝:) – 2012-07-25 09:12:27

0
awk -F">" '{print $1}' xmlfile | sed -e '/<\//d' -e '/<?/d' -e 's/<//g' 
+0

如果文件進來單線,那麼它不提供任何輸出。 – 2012-07-25 09:17:30