2017-07-07 53 views
1

我試圖徒勞地解決我用這個腳本的問題。更正腳本Bash

#!/bin/bash 
for a in `wget -O - "https://pastebin.com/raw/7BFC94Ty"`; do echo "local-zone: \""$a" redirect\"""local-data: \""$a" A 0.0.0.0\"" >> adstest.conf; done 

下面是結果

local-zone: "101com.com 
redirect"local-data: "101com.com 
A 0.0.0.0" 

但是,這是不正確的格式,這是預期的結果:

local-zone: "101com.com" redirect 
local-data: "101com.com A 0.0.0.0" 

但我不能找到這個該死的解決方案。我也在尋找能夠使用本地文件而不是網址的解決方案,因爲我有一個40 000行的文件,並且我希望沒有Web主機。

謝謝你的幫助!

+0

學習使用'printf' cmd,無論是從cmd行還是作爲awk的一部分。請參閱http://grymoire.com/Unix/awk.html並搜索printf進行合理的介紹。如果你用'[awk] printf'在這裏搜索,你會發現6000+ Q/A應該幫助說明使用情況。祝你好運。 – shellter

回答

0

首先,你必須通過dos2unix運行它擺脫Windoze換行符,然後做兩個獨立的echo S和發送整個循環的輸出文件的結果:

for a in `wget -O - "https://pastebin.com/raw/7BFC94Ty" | dos2unix`; do 
    echo 'local-zone: "'$a'" redirect' 
    echo 'local-data: "'$a' A 0.0.0.0"' 
done >> adstest.conf 

我也使用單引號,所以我不必逃避你想打印的雙打。

樣品結果:

$ rm adstest.conf 

$ for a in `wget -O - "https://pastebin.com/raw/7BFC94Ty" | dos2unix`; do echo 'local-zone: "'$a'" redirect'; echo 'local-data: "'$a' A 0.0.0.0"'; done >> adstest.conf 
--2017-07-07 14:12:07-- https://pastebin.com/raw/7BFC94Ty 
Resolving pastebin.com (pastebin.com)... 104.20.208.21, 104.20.209.21 
Connecting to pastebin.com (pastebin.com)|104.20.208.21|:443... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/plain] 
Saving to: ‘STDOUT’ 

-          [ <=>                 ] 385.23K --.-KB/s in 0.09s 

2017-07-07 14:12:07 (3.97 MB/s) - written to stdout [394475] 

$ wc -l adstest.conf 
41860 adstest.conf 

$ head adstest.conf 
local-zone: "101com.com" redirect 
local-data: "101com.com A 0.0.0.0" 
local-zone: "101order.com" redirect 
local-data: "101order.com A 0.0.0.0" 
local-zone: "123found.com" redirect 
local-data: "123found.com A 0.0.0.0" 
local-zone: "140proof.com" redirect 
local-data: "140proof.com A 0.0.0.0" 
local-zone: "180hits.de" redirect 
local-data: "180hits.de A 0.0.0.0" 
+0

請不要永遠使用'for a in $(...)';這是一個應該修復的錯誤。 http://mywiki.wooledge.org/DontReadLinesWithFor – chepner

+0

我努力盡可能少地改變他的代碼。由於URL中不允許使用空格,所以'wget'的輸出中不能有空格。因此,這將工作得很好,因爲他不是在讀線條,而是在說話。這些詞恰好是分開的。 – Jack

+0

我只是跑了一個測試,似乎有問題,輸出文件很好地創建,但它是空的。 – Barbosa

1

爲了解決@ chepner的關注,我們可以用sed處理流:

wget -O - "https://pastebin.com/raw/7BFC94Ty" | dos2unix | sed 's/\(.*\)/local-zone: "\1" redirect\nlocal-data: "\1 A 0.0.0.0"/' > adstest.conf 

它只是需要行的整個格局空間,保存\(.*\) ,並將其替換爲我們想要的文本,將模式空間放回\1,我們需要它,並使用\n來放入換行符。