我试图从一行中删除某个模式,但不是整行本身。一个例子是:
原始
user=dannyBoy
所需
dannyBoy
我有一个充满类似行的文件,所以我想知道如何删除文本的特定部分,无论是从列表中删除前五个字符还是搜索模式“user =”并将其删除。
答案 0 :(得分:5)
有很多方法可以做到这一点:
cut -d'=' -f2- file
sed 's/^[^=]*//' file
awk -F= '{print $2}' file #if just one = is present
cut
设置分隔符(-d'=
),然后打印从第二个分段开始的所有字段(-f2-
)。sed
查找从开头到第一个=
的所有内容并将其删除。awk
将=
设置为字段分隔符并打印第二个字段。答案 1 :(得分:0)
以下命令删除前5个字符:
$ echo "user=dannyboy" | cut -c 6-
您也可以在cut -c 6- inputfilename
的文件中使用它。
答案 2 :(得分:0)
使用ex
:
echo user=dannyBoy | ex -s +"norm df=" +%p -cq! /dev/stdin
其中ex
等同于基本执行vi命令的vi -e
/ vim -e
:df=
(删除直到找到=
),然后打印缓冲区( %p
)。
如果你有这样的多行,那么使用替换会更简单:
ex -s +"%s/^.*=//g" +%p -cq! foo.txt
要编辑文件,请将-cq!
更改为-cwq
。