所以有一个像这样的输入文件res.txt
Lock
我有这样的模式
processing file 0x8001.values
channel 1: 123
channel 2: 234
channel 3: 345
processing file 0x8002.values
channel 1: 456
channel 2: 567
channel 3: 678
使用,例如,
0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]
我可以获取我的文件名列表(没有.values),这很好!
grep -o "0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]" res.txt
但仍然希望所有其他线条与模式不匹配,保持原样:
0x8001
0x8002
我对sed非常熟悉,但我找不到办法做我想做的事。
答案 0 :(得分:1)
你可以使用sed。
$ sed 's/.*\(0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]\).*/\1/' file
0x8001
channel 1: 123
channel 2: 234
channel 3: 345
0x8002
channel 1: 456
channel 2: 567
channel 3: 678
我假设一行中只有一个十六进制字符串,如0x8001
。
答案 1 :(得分:1)
使用gnu awk,你可以使用你的正则表达式use match
function这样:
awk 'match($0, /0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]/){$0=substr($0,RSTART,RLENGTH)} 1' file
0x8001
channel 1: 123
channel 2: 234
channel 3: 345
0x8002
channel 1: 456
channel 2: 567
channel 3: 678