2009-05-20 53 views
0
# join pairs of lines side-by-side (like "paste") 
sed '$!N;s/\n/ /' 

上述腳本來自sourceforge上的sed one-liners列表。這個sed命令爲什麼在bash腳本里面什麼都不做,但在外面工作?

我希望在bash腳本中使用它,但如果在腳本中使用它,則不起作用。如果我通過它輸出腳本的輸出,它會按照所述連接並行連接線對。

一些角色必須逃跑,但我不能「看到」哪個角色需要逃脫才能使其在bash腳本中工作。

Yoroshiku Onegaishimasu!

後來..

#!/bin/bash 
# numbers.sh 

for X in 1 2 3 4 5 6 7 8 9 0 
do 
     echo $X 
done 

當使用這個腳本:

#!/bin/bash 

./numbers.sh | sed '$!N;s/\n/ /' 

工作正常..

1 2 
3 4 
5 6 
7 8 
9 0 

請讓我重新集結在此我的想法..

後來...

我在腳本中發現了一個邏輯錯誤,導致它崩潰。

回答

3

我不明白什麼問題是沒有看到你的腳本。這裏的一個快速測試和它的工作一個簡單的腳本就好內:

#!/bin/bash 
cat /etc/crontab | sed '$!N;s/\n/ /' 

如果你試圖嵌入一個字符串或變量裏面的命令時,\ n將被轉義候選人。

對於什麼是值得的,除非你真的需要高級容器(這是很少見的),否則很少有一個'strong'的情況是用直線上/ bin/sh posix兼容的shell腳本來製作bash特定的腳本。你最終將得到一個腳本,它可以攜帶數十個其他posix/korn/bourne兼容shell(包括bash)。

乾杯! Sean

+0

感謝您的評論,我沒有理由使用bash,我現在已經證實,正如您所說,它工作正常。它必須是腳本本身更具體的東西。 – 2009-05-20 02:50:44

+1

貓的無用用途。 `sed'$!N; s/\ n//' Jens 2012-05-08 12:04:30

1

您是否缺少"[email protected]"來指示文件名參數 - 因此它只能從標準輸入中讀取?

什麼是不良行爲?該文件是否簡單地複製到標準輸出?

適用於我 - 在Cygwin下。 'al'是一個程序,每行列出一個參數。

$ al a b c d e f | sed '$!N;s/\n/ /' 
a b 
c d 
e f 
$ cat xxx 
sed '$!N;s/\n/ /' 
$ al a b c d e f g | bash xxx 
a b 
c d 
e f 
g 
$ 
相關問題