在bash中使用awk或sed编辑文本

时间:2014-05-03 11:39:53

标签: linux bash shell awk sed

file.txt的内容是这样的:

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的整个输出重定向到file2.txt

怎么可能......?

由于

4 个答案:

答案 0 :(得分:2)

尝试将脚本更改为:

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

有什么需要改变吗?

答案 1 :(得分:2)

使用 sed ,你可以做这样的事情

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

它将删除包含空格序列的行开头的所有序列,后跟单个非空白字符而不是空格序列。使用问题中的文件,结果是:

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

答案 2 :(得分: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

只需打印最后一栏。

答案 3 :(得分:1)

另一个简单的sed命令,

sed 's/.* \(.*\)/\1/g' file1.txt > file2.txt
相关问题