2014-02-28 49 views
0

我有一個關於linux sed命令的問題。我只想插入東西在每行之前,並且附加東西在每行之後。我想同時做這些事linux sed,同時插入並追加

例如,假設file.txt是這樣的:

1 
2 
3 

我需要輸出:

hello 
1 
world 
hello 
2 
world 
hello 
3 
world 

所以我覺得命令應該是這樣的:

cat file.txt | sed 'i\ 
hello\ 
a\ 
world\ 
' 

但結果是不正確的,a不解釋爲sed命令,我在這裏需要一些分隔符還是我做錯了什麼?

+0

請添加一些示例輸入和你的期望。 –

+0

貓是沒用的。直接將文件提供給sed命令 – BMW

回答

2

您應在「你好」和「世界」中刪除反斜槓,因此命令變爲:

cat file.txt | sed 'i\ 
hello 
a\ 
world 
' 

有一個反斜槓「你好」連接「你好」到「」好像「是」後,是要插入的另一行。

0

這可能爲你工作(GNU SED):

sed -e 'ihello' -e 'aworld' file 

sed $'ihello\naworld\n' file 
1

只要保持它的簡單,用awk:

awk '{printf "Hello\n%s\nWorld\n",$0}' file 

,或者如果你喜歡:

awk '{print "Hello"; print; print "World"}' file 

甚至:

awk '{ 
    print "Hello" 
    print 
    print "World" 
}' file 
0

你可以試試下面的命令:

sed -ri 's/(.*)/hello\n\1\nworld/' file.txt 

說明:

  • 使用正則表達式選項-r, (.*)將包含每個內容全行,然後又改爲hello
  • 隨後換行(即\n),
  • 接着\1(這是整個線,(.*)聚集的內容),
  • 隨後換行,隨後world

使用正則表達式,.是任意字符,.*是零個或多個上線,(.*)地方行成\1,如在()第一正則表達式。

+1

雖然這可能會回答這個問題,但也請添加一個簡短的說明,說明您的代碼的作用以及爲什麼它解決了最初的問題。 – user1438038

+1

好點。使用正則表達式選項-r,(。*)將包含每一整行的內容,然後依次改爲hello,然後換行(即\ n),然後是\ 1(這是整行,由(。*)收集),然後是換行,然後是世界。 或使用正則表達式。是任何字符,。*在行上出現零次或多次出現,(。*)將行放入\ 1中,作爲()中的第一個正則表達式。 –

+0

幹得好。我在答案中加入瞭解釋,所以我們可以刪除評論。 – user1438038