2014-05-03 83 views
0
sed的

file.txt的內容是這樣的:編輯文本或在bash

fghfg 
sdfsd 
thrt 
wefs 
dfd 
htyj 
dfd 
gsedf 
    1  sdfsdf 
    3  sdfghj 
    f  fgdfhtyu 
dfdsfsd 
sdgdfg 
sdfzcxzc 
fgjty 

我想這部分改變:

1  sdfsdf 
3  sdfghj 
f  fgdfhtyu 

這一個:(除去第一柱和空格)

sdfsdf 
sdfghj 
fgdfhtyu 

然後重定向的file.txt到整個輸出。

怎麼可能...?

感謝

+0

現在的問題不是很清楚。這個模式的含義是什麼? – devnull

+0

我的意思是剛剛刪除第一列.. – MLSC

+0

我編輯我的問題 – MLSC

回答

1

這應該做的:一天

awk '{print $NF}' file.txt > file2.txt 

或最短的解決方案:

awk '{$0=$NF}1' file.txt > file2.txt 
cat file2.txt 
fghfg 
sdfsd 
thrt 
wefs 
dfd 
htyj 
dfd 
gsedf 
sdfsdf 
sdfghj 
fgdfhtyu 
dfdsfsd 
sdgdfg 
sdfzcxzc 
fgjty 

剛打印的最後一列。

+0

是非常好 – MLSC

+1

@MortezaLSC你冷酷地使用'awk'$ 0 = $ NF',但它不健壯並且會刪除空行。我也喜歡'awk'比'sed'更好,因爲它更具可讀性。 – Jotne

+0

當然你是對的......我不知道爲什麼我不能解決它......我失去了我的專注力:) – MLSC

2

試着改變你的腳本是:

find "$1" -print | 
while IFS= read -r line; do 
    awk '!a[$0]++{print $NF}' "$line" > /tmp/file.txt 
done 

做任何事情需要改變嗎?

+0

謝謝我得到了答案 – MLSC

2

使用sed的,你可以做這樣的事情

sed 's/^ \+[^ ] \+//' file1.txt > file2.txt 

它將刪除所有序列的包含空格的序列行的開頭,後跟一個非空格字符不是一個序列的空格。在你的問題使用的文件,結果是:

fghfg 
sdfsd 
thrt 
wefs 
dfd 
htyj 
dfd 
gsedf 
sdfsdf 
sdfghj 
fgdfhtyu 
dfdsfsd 
sdgdfg 
sdfzcxzc 
fgjty 
+0

謝謝....非常好的答案。 .. – MLSC

+0

@MortezaLSC非常歡迎 –

1

另一種簡單的sed命令,

sed 's/.* \(.*\)/\1/g' file1.txt > file2.txt 
+0

@Mortez試試這個'sed's /.* \(。* \)/ \ 1/g; s /\(.*\)/ test:\ 1/g'file1.txt> file2.txt' –