sed 命令:如何同时查找和修改多个模式?
sed command: how to find and modify multiple patterns simultaneously?
我有一个问题需要用 bash 解决,尤其是 sed。
我的数据集是这样的:
James, L- PF 00
Jordan, M- PF 23
Bird, L- C 33
我需要这样结束:
uniform number for L. James: 00
uniform number for M. Jordan: 23
使用一个 sed 命令。
我最初的尝试是这样的:
sed -r 's/(.*), ([[:upper:]])- ([0-9]+)/uniform number for . : /' filename
但我似乎找不到数字部分的任何匹配项。我设法在早期版本中获得了名字字母和姓氏,但没有与数字结合...
有什么帮助吗?我做错了什么?
您似乎错过了 .*
来匹配 -
和数字之间的任何文本:
sed -r 's/(.*), ([[:upper:]])-.* ([0-9]+)/uniform number for . : /' nba_roster.txt
# ^^
您也可以使用
sed -E 's/^([^,]+), ([[:upper:]])[^0-9]*([0-9]+).*/uniform number for . : /' nba_roster.txt
参见 online demo:
#!/bin/bash
s='Sims, J- PF 45
Samanic, L- PF 91
Noel, N- C 3'
sed -E 's/^([^,]+), ([[:upper:]])[^0-9]*([0-9]+).*/uniform number for . : /' <<< "$s"
输出:
uniform number for J. Sims: 45
uniform number for L. Samanic: 91
uniform number for N. Noel: 3
图案详情
^
- 字符串开头
([^,]+)
- 第 1 组 (</code>):逗号以外的任何一个或多个字符</li>
<li><code>,
- 逗号和 space
([[:upper:]])
- 第 2 组 (</code>):大写字母</li>
<li><code>[^0-9]*
- 零个或多个 non-digit 个字符
([0-9]+)
- 第 3 组 (</code>):一位或多位数字</li>
<li><code>.*
- 字符串的其余部分(如果有的话)。
使用sed
sed 's/\([^,]*\), \([A-Z]\)[^0-9]*\(.*\)/uniform number for . : /' input_file
uniform number for J. Sims: 45
uniform number for L. Samanic: 91
uniform number for N. Noel: 3
我有一个问题需要用 bash 解决,尤其是 sed。 我的数据集是这样的:
James, L- PF 00
Jordan, M- PF 23
Bird, L- C 33
我需要这样结束:
uniform number for L. James: 00
uniform number for M. Jordan: 23
使用一个 sed 命令。
我最初的尝试是这样的:
sed -r 's/(.*), ([[:upper:]])- ([0-9]+)/uniform number for . : /' filename
但我似乎找不到数字部分的任何匹配项。我设法在早期版本中获得了名字字母和姓氏,但没有与数字结合...
有什么帮助吗?我做错了什么?
您似乎错过了 .*
来匹配 -
和数字之间的任何文本:
sed -r 's/(.*), ([[:upper:]])-.* ([0-9]+)/uniform number for . : /' nba_roster.txt
# ^^
您也可以使用
sed -E 's/^([^,]+), ([[:upper:]])[^0-9]*([0-9]+).*/uniform number for . : /' nba_roster.txt
参见 online demo:
#!/bin/bash
s='Sims, J- PF 45
Samanic, L- PF 91
Noel, N- C 3'
sed -E 's/^([^,]+), ([[:upper:]])[^0-9]*([0-9]+).*/uniform number for . : /' <<< "$s"
输出:
uniform number for J. Sims: 45
uniform number for L. Samanic: 91
uniform number for N. Noel: 3
图案详情
^
- 字符串开头([^,]+)
- 第 1 组 (</code>):逗号以外的任何一个或多个字符</li> <li><code>,
- 逗号和 space([[:upper:]])
- 第 2 组 (</code>):大写字母</li> <li><code>[^0-9]*
- 零个或多个 non-digit 个字符([0-9]+)
- 第 3 组 (</code>):一位或多位数字</li> <li><code>.*
- 字符串的其余部分(如果有的话)。
使用sed
sed 's/\([^,]*\), \([A-Z]\)[^0-9]*\(.*\)/uniform number for . : /' input_file
uniform number for J. Sims: 45
uniform number for L. Samanic: 91
uniform number for N. Noel: 3