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