Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Unix 删除从特定字符开始的所有文本_Unix_Awk_Sed_Grep - Fatal编程技术网

Unix 删除从特定字符开始的所有文本

Unix 删除从特定字符开始的所有文本,unix,awk,sed,grep,Unix,Awk,Sed,Grep,我有一个像这样的文件设置 TEXT1:TEXT2 基本上是由分隔的文本行: 我希望:右侧的所有文本都消失, 因此,在AWK中TEXT1:TEXT2将变成TEXT1,将:后面的所有内容替换为零: $ awk 'sub(/:.*/,"",$0)' test TEXT1 将“:”作为分隔符,然后将column1设置为记录 使用切割 我们告诉cut我们的字段分隔符是冒号,-d:,我们要选择第一个字段,-f1: $ cut -d: -f1 file TEXT1 使用sed 我们告诉sed删除一行上的

我有一个像这样的文件设置

TEXT1:TEXT2
基本上是由
分隔的文本行:

我希望
右侧的所有文本都消失,
因此,在AWK中
TEXT1:TEXT2
将变成
TEXT1

,将
后面的所有内容替换为零:

$ awk 'sub(/:.*/,"",$0)' test
TEXT1
将“:”作为分隔符,然后将column1设置为记录

使用切割 我们告诉
cut
我们的字段分隔符是冒号,
-d:
,我们要选择第一个字段,
-f1

$ cut -d: -f1 file
TEXT1
使用sed 我们告诉sed删除一行上的第一个冒号以及以下内容:

$ sed 's/:.*//' file
TEXT1
使用grep 我们告诉grep选择每个的第一部分,直到但不包括第一个冒号:

$ grep -o '^[^:]*' file
TEXT1
使用
sed

sed -i.bkp 's/:.*//' infile.txt
这还将更改文件,并创建名为
infle.txt.bkp的备份文件

使用
grep

grep -oP '.*(?=:)' infile.txt
下面的脚本

awk -v FS=":" '{print $1}' file

也会给你同样的效果。

这看起来又短又优雅。然而,它隐藏了问题。假设我有一行:
0:7
,你的程序给出了什么?如果你想在没有
{…}
的情况下坚持这种方式,你可以尝试
($0=$1)|1
($0=$1)+1
awk-F:'$0=$1'填充
我喜欢这个,它非常优雅++别忘了你动作周围的花括号:
awk…'{print$1}'…
@jas:Good note:)
awk -v FS=":" '{print $1}' file