2017-01-15 41 views
0

我想單行以下工作命令在bash運行它:單行CMD的sed的Mac OSX埃爾卡皮坦

LANG=C sed -E ' 
s/$/\\z/ 
:while 
s/([0-9]{6})(.*\\z.*)/\2 "\1"/ 
twhile 
s/.*\\z//' myfile.txt 

爲myfile.txt的樣品:

123456 \ r \ n \ r \ n 789112 \ r \ n 889667

輸出上述CMD(這是預期的結果) :

「123456」, 「789112」, 「889667」

既不此:

LANG=C sed -E 's/$/\\z/; :while; s/([0-9]{6})(.*\\z.*)/\2 "\1"/; twhile; s/.*\\z//' myfile.txt 

輸出:

123456 \ r \ n \ r \ n 789112 \ r \ n 889667 \ z

或者這其實工作原理:

LANG=C sed -E 's/$/\\z/' -E :while -E 's/([0-9]{6})(.*\\z.*)/\2 "\1"/;twhile' -E 's/.*\\z//' myfile.txt 

輸出:

sed可以:-E:沒有這樣的文件或目錄

sed的:當:沒有這樣的文件或目錄

的sed :-E:沒有這樣的文件或目錄

sed:s /([0-9] {6})(。 \ z。)/ \ 2 「\ 1」/; twhile:sed的沒有這樣的文件或目錄

:沒有這樣的文件或目錄

的sed:-E小號/.* \ž//:沒有這樣的文件或目錄

123456 \ r \ n \ r \ n 789112 \ r \ n 889667 \ž

其結果是,既顯示該文件的一個且僅行,而不是圖案的多個實例的/ [0-9] {6}/

我相信我很想念g關於如何使用分號的東西..

+0

你會得到什麼錯誤? – 123

+0

兩者都顯示文件的唯一一行,而不是模式/ [0-9] {6} /的多個實例。錯過了這篇文章的帖子,謝謝;) – user2702566

+0

你能提供樣本輸入和輸出嗎? – 123

回答

1

sed是簡單替換個別行,就是這樣。你試圖做的不是這樣,所以你不應該試圖使用sed來做到這一點。目前尚不清楚你正在做什麼,但就是這樣的:

$ awk -v RS='\\s+' 'NF{print "\"" $0 "\""}' file 
"123456" 
"789112" 
"889667" 

使用GNU AWK多焦RS和\s簡寫[[:space:]]。上述在此輸入文件運行:

$ cat -v file 
123456 ^M 
^M 
789112 ^M 
889667 

這是我想你想你的貼樣本輸入來表達:

$ printf '123456 \r\n \r\n 789112 \r\n 889667' | 
    awk -v RS='\\s+' 'NF{print "\"" $0 "\""}' 
"123456" 
"789112" 
"889667" 

,或者如果你喜歡看的,而字符串匹配比分開琴絃的空間:

$ printf '123456 \r\n \r\n 789112 \r\n 889667' | 
    awk -v RS='[0-9]{6}' '{print "\"" RT "\""}' 
"123456" 
"789112" 
"889667" 
+0

非常感謝您的幫助。我的文件是一條單線,看起來像這樣'123456 \ r \ n \ r \ n 789112 \ r \ n 889667'。我從awk開始,但無法找到正確的方式來做到這一點,所以我試着sed ......但似乎我錯了在sed和awk之間使用什麼工具... – user2702566

+0

但是根據定義,如果它包含'\ r \ n'並不是單行,因爲行在Windows上以'\ r \ n'結尾,在UNIX上以'\ n'結尾,因此無論哪種方式都存在換行符。除非你的意思是它真的包含4個字符'反斜槓r反斜槓'。 –

+0

這條線是向服務器發出curl請求的答案,服務器響應是一個帶有\ r \ n值的json(這很愚蠢......但我沒有任何控制權,我只是嘗試解析答案......) – user2702566