将每行的第一部分剥离到冒号

将每行的第一部分剥离到冒号

所以我有一个文本文件,我想删除其中第一个冒号(包括冒号)的所有内容。例如,如果这是输入

0000007ba9ec6950086ce79a8f3a389db4235830:9515rfsvk
000000da2a12da3fbe01a95bddb8ee183c62b94d:letmein2x
000000edf3179a1cf4c354471a897ab7f420bd52:heychudi:rbhai
000000f636f0d7cbc963a62f3a1bc87c9c985a04:cornetti
0000010a15f5b9315ef8e113f139fa413d1f2eb2:3648067PY128

那么这应该是输出

9515rfsvk
letmein2x
heychudi:rbhai
cornetti
3648067PY128

请注意,第 3 行中的第二个冒号仍保留,仅应删除从每行开头到(包括)第一列的位置。

有没有一种快速的方法可以用 grep 或 awk 来做到这一点?

答案1

cut

cut -d: -f2- file

-d-f2-设置从第二个字段到最后一个字段的分隔符和平均值。

答案2

使用 sed:

sed 's/[^:]*://' input.txt

换句话说:匹配零个或多个非冒号字符的序列,后跟冒号,并将它们替换为空。

答案3

这可以与grep(PCRE)一起使用:

 grep -Po "(?<=:).*" file

输出:

9515rfsvk
letmein2x
heychudi:rbhai
cornetti
3648067PY128

答案4

如果第一个:始终位于文件中的位置 41,则可以使用:

colrm 1 41 <file

或者

cut -c42- file

这不是最方便的选项,因为您需要首先确定列的位置,但至少它也可以在没有分隔符的情况下工作。

相关内容