2014-05-03 119 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' –