我有一個需要用 bash 尤其是 sed 解決的問題。我的資料集是這樣的:
Sims, J- PF 45
Samanic, L- PF 91
Noel, N- C 3
我需要得到這樣的結果:
uniform number for J. Sims: 45
uniform number for L. Samanic: 91
使用單個 sed 命令。
我最初的嘗試是這樣的:
sed -r 's/(.*), ([[:upper:]])- ([0-9] )/uniform number for \2. \1: \3/' nba_roster.txt
但我似乎無法為數字部分找到任何匹配項。我設法在早期版本中獲得了名字字母和姓氏,但沒有與數字結合......
有什么幫助嗎?我究竟做錯了什么?
uj5u.com熱心網友回復:
使用sed
sed 's/\([^,]*\), \([A-Z]\)[^0-9]*\(.*\)/uniform number for \2. \1: \3/' input_file
uniform number for J. Sims: 45
uniform number for L. Samanic: 91
uniform number for N. Noel: 3
uj5u.com熱心網友回復:
看起來您錯過.*了匹配-和 之間的任何文本:
sed -r 's/(.*), ([[:upper:]])-.* ([0-9] )/uniform number for \2. \1: \3/' nba_roster.txt
# ^^
你也可以使用
sed -E 's/^([^,] ), ([[:upper:]])[^0-9]*([0-9] ).*/uniform number for \2. \1: \3/' nba_roster.txt
查看在線演示:
#!/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 \2. \1: \3/' <<< "$s"
輸出:
uniform number for J. Sims: 45
uniform number for L. Samanic: 91
uniform number for N. Noel: 3
圖案細節
^- 字串的開始([^,] )- 第 1 組 (\1):除逗號之外的任何一個或多個字符,- 逗號和空格([[:upper:]])- 第 2 組 (\2):大寫字母[^0-9]*- 零個或多個非數字字符([0-9] )- 第 3 組 (\3):一位或多位數字.*- 字串的其余部分(如果有)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455964.html
