Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在bash中使用awk或sed编辑文本_Linux_Bash_Shell_Awk_Sed - Fatal编程技术网

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

Linux 在bash中使用awk或sed编辑文本,linux,bash,shell,awk,sed,Linux,Bash,Shell,Awk,Sed,我的文件.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 对此:(通过删除第一列和空格) 然后将file.txt的整个输出重定向到file2.txt 怎么可能 谢谢尝试将

我的
文件.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
对此:(通过删除第一列和空格)

然后将
file.txt
的整个输出重定向到
file2.txt

怎么可能


谢谢

尝试将脚本更改为:

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

是否需要更改任何内容?

尝试将脚本更改为:

find "$1" -print |
while IFS= read -r line; do
    awk '!a[$0]++{print $NF}' "$line" > /tmp/file.txt
done
有什么需要更改的吗?

使用sed,您可以执行以下操作

sed 's/^ \+[^ ] \+//' file1.txt > file2.txt
它将删除行首包含空格序列的所有序列,后跟一个非空格字符,而不是空格序列。使用问题中的文件,结果是:

fghfg
sdfsd
thrt
wefs
dfd
htyj
dfd
gsedf
sdfsdf
sdfghj
fgdfhtyu
dfdsfsd
sdgdfg
sdfzcxzc
fgjty
使用sed,您可以执行以下操作

sed 's/^ \+[^ ] \+//' file1.txt > file2.txt
它将删除行首包含空格序列的所有序列,后跟一个非空格字符,而不是空格序列。使用问题中的文件,结果是:

fghfg
sdfsd
thrt
wefs
dfd
htyj
dfd
gsedf
sdfsdf
sdfghj
fgdfhtyu
dfdsfsd
sdgdfg
sdfzcxzc
fgjty
这应该做到:

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
只需打印最后一列。

这应该可以:

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

只需打印最后一列。

另一个简单的
sed
命令

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

另一个简单的
sed
命令

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


这个问题不是很清楚。你说达到这个模式是什么意思?我的意思是删除第一列..是的…我通过这个命令
awk'删除了副本!一个[$0]+'“$line”
。谢谢。问题还不清楚
awk'{print$NF}文件名
可能就是你要找的。好吧,算了吧……可能是我错了……请帮我做这个……我又更新了我的问题……谢谢问题不太清楚。你说达到这个模式是什么意思?我的意思是删除第一列..是的…我通过这个命令
awk'删除了副本!一个[$0]+'“$line”
。谢谢。问题还不清楚
awk'{print$NF}文件名
可能就是你要找的。好吧,算了吧……可能是我错了……请帮我做这个……我又更新了我的问题……谢谢谢谢谢谢我得到了答案谢谢我得到了答案answer@MortezaLSC您可以冷使用
awk'$0=$NF'
,但它并不健壮,会删除空行。我也确实更喜欢
awk
而不是
sed
,因为它更可读。当然你是对的。。。我不知道为什么我不能解决它。。。我失去了注意力:)
awk'$0=$NF'
不仅会删除空行,还会删除数值计算结果为零的字符串行,例如
0
0.0
0e10
,等等。@MortezaLSC您可以冷用
awk'$0=$NF'
,但它并不健壮,而且会删除空行。我也确实更喜欢
awk
而不是
sed
,因为它更可读。当然你是对的。。。我不知道为什么我不能解决它。。。我失去了注意力:)
awk'$0=$NF'
不仅会删除空行,还会删除数值计算结果为零的字符串行,例如
0
0.0
0e10
,等等@Mortez试试这个
sed's/*\(.\)/\1/g;s/\(.*)/test:\1/g'file1.txt>file2.txt
@Mortez试试这个
sed's/*\(.*)/\1/g;s/\(.*)/test:\1/g'file1.txt>file2.txt