2014-01-22 74 views
0

我使用sed來提取文件中2個字符串之間的內容。我使用:防止sed輸出文件的其餘部分

sed 's/^.*bbb //; s/ddd.*$//' '/Users/myName/Desktop/sedtest.txt' 

和文件包含:

aaa bbb ccc ddd eee 
more random text 
… 

當我使用上面的sed命令它成功地提取ccc,但它也輸出下面的線。它輸出:

ccc 
more random text 
… 

但我只希望它輸出:

ccc 

如何修改的命令,使其只輸出ccc?此外,我不知道在運行時ccc是什麼bbbddd

回答

1

之間試試這個:

grep bbb yourfile | grep ddd | sed yourcommand 

這隻會在包含「BBB」和「DDD」行操作。

0
sed 's/^.*bbb\(.*\)ddd.*$/|\1|/' /tmp/file.txt | grep '^|' | cut -d\| -f2 
1

當sed可以輕鬆地做到這一點時,不需要鏈接greps。

sed 's/^.*bbb\(.*\)ddd.*$/\1/;t a;d;:a' /Users/myName/Desktop/sedtest.txt 
+1

「同樣容易」,他說,使用奧術和「記錄不完善」的sed命令(http://www.grymoire.com/unix/sed.html)。每個人都可以讀取「grep a | grep b」爲...只能找到包含「a」和「b」的行:-) –

+0

我得到'sed:1:「s /^.* bbb \(。* \)ddd 。* $/\ 1 ...「:undefined標籤'a; d;:a''運行此命令時 –

+0

@AdamJohns嘗試在第一個分號之後放一個空格,分號前。 – Kevin

1

awk應該做的:

awk '/bbb.*ddd/ {gsub(/.*bbb | ddd.*/,x);print}' file 
ccc 

它選擇行只與bbbddd。然後刪除所有最多bbbddd

相關問題