Bash 在模式匹配时拆分字符串

标签 bash awk sed

我有这样的数据

ID | Name | Grade
1|Robin Hood so hood | A
2|Gwen Stack DO Rick Stacy |C
3|Bling s/o Peter| A

so 是儿子,DO 是女儿,S/O 是儿子。

我凝视着我如何到达

     ID | Name | Grade
    1|Robin Hood| A
    2|Gwen Stack  |C
    3|Bling| A

最后我会把这些人邮寄到我不愿意只提供完整字符串的成绩

我尝试使用 while 循环,awk 将第二个字段放入数组,然后 for 循环到数组,这是不必要的

任何 SED 或 AWK 方法 ??

最佳答案

你可以使用这个 sed 命令:

sed -i.bak 's~ [sSdD]/*[oO] [^|]*~~' file
ID | Name | Grade
1|Robin Hood|A
2|Gwen Stack|C
3|Bling|A

或者使用awk:

awk -F ' [sSdD]/?[oO] [^|]*' '{print $1 $2}' file
ID | Name | Grade
1|Robin Hood|A
2|Gwen Stack|C
3|Bling|A

关于Bash 在模式匹配时拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33810662/

相关文章:

python - 将文件中的数据插入 SQLite 数据库

linux - 如何根据 K 列的长度对 Tab 格式文件进行排序

linux - 使用 awk 更改 no_proxy 环境变量值

shell - 如何增加文件中的数字

regex - 如何在 bash 中从绝对路径创建相对路径?

bash - 使用 grep 查找文件并在编辑器中打开

BASH:检查变量值是否以 [

r - Dockerfile 中的多行 Rscript

linux - 在文件的每一列上添加 1-10 分钟,并且文件有 n 次

regex - 用 SED 替换特定模式