在Bash / sed中分隔字符

时间:2018-06-20 11:44:26

标签: linux bash sed

我有一个类似的文件:

09/03/2018 t38940 "https:/dsdsadasdsa.dsadsa.dsadsa
09/03/2018 x38940 "https:/dsadas.dsad.dsa
09/03/2018 d38940 "https:/dasdsa.dsadas.dsadsa
09/03/2018 (38940 "https:/dsadas.dsadasd.dsa
09/03/2015 )38940 "https:/dsds.dasdas.d

我想得到结果:

09/03/2018 38940 "https:/dsdsadasdsa.dsadsa.dsadsa
09/03/2018 38940 "https:/dsadas.dsad.dsa
09/03/2018 38940 "https:/dasdsa.dsadas.dsadsa
09/03/2018 38940 "https:/dsadas.dsadasd.dsa
09/03/2015 38940 "https:/dsds.dasdas.d

我想删除开头第二列的数字和字符(始终仅是一个字符)。

我如何编写sed命令来获取该信息?

5 个答案:

答案 0 :(得分:2)

此sed单行适用于您的示例:

sed 's/ ./ /' file

答案 1 :(得分:1)

使用awk会更容易:

awk '{$2=substr($2,2)}1' file

此脚本删除每行第二个元素的第一个字符。

答案 2 :(得分:0)

请您尝试以下。

awk '{gsub(/^\)|^\(/,"",$2)} 1'  Input_file

答案 3 :(得分:0)

我假设您的列始终由单个空格分隔。

捕获第一列\([^ ]* \)(零个或多个非空格字符,后跟一个空格),并忽略下一个字符.(不包括在替换字符中):

sed 's/\([^ ]* \)./\1/' file

通常,要对第N列执行此操作,然后捕获N-1个重复,例如:

sed 's/\(\([^ ]* \)\{2\}\)./\1/' file

将删除第三列的第一个字符。

使用-E来使用(){}而不使用反斜杠:

sed -E 's/(([^ ]* ){2})./\1/' file

答案 4 :(得分:0)

使用GNU {Timestamp, kvp1, kvp2, kvpN},假设您总是想删除第12个字符:

cut

或与任何符合POSIX的cut -c 12 --complement infile

cut