使用 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