bash:在给定字符串后检索数字

时间:2013-08-15 17:20:41

标签: bash

我有一个包含以下内容的文件:

  blabla sometinh#LULWUT-12342"asa
  haha"LULWUT-9635bgh
  haha'LULWUT-3679//stuff

模式LULWUT-总是在五个数字序列中的四个之前。我该如何检索数字模式?

对于示例住所,它将是

blabla sometinh#LULWUT-12342"asa > LULWUT-12342
haha"LULWUT-9635bgh              > LULWUT-9635
haha'LULWUT-3679//stuff          > LULWUT-3679

5 个答案:

答案 0 :(得分:7)

grep -o 'LULWUT-[0-9][0-9]*' file

使用grep的非标准-o扩展名(但在Mac OS,GNU和BSD系统上仍可使用)。

答案 1 :(得分:2)

要仅匹配LULWUT-后跟四位或文件数字模式,您可以使用:

grep -o 'LULWUT-[0-9]\{4\}[0-9]\?' file

答案 2 :(得分:2)

这是一种仅限bash的解决方案。

shopt -s extglob # needed for the %%*() pattern below

while read line
do
    line_without_prefix="${line##*LULWUT}"    # remove longest prefix until LULWUT
    line_without_suffix="${line_without_prefix%%*([^0-9])}"   # remove longest non-digit suffix
    echo "LULWUT$line_without_suffix"
done

shopt -u extglob # undo, if extglob is not needed

答案 3 :(得分:1)

您可以尝试使用以下命令替换输入文件中的(s ubstitute)文本。

sed 's/.*LUL/LUL/' file.txt > newfile.txt

它将创建一个名为newFile.txt的新文件

答案 4 :(得分:1)

grep -o 'LULWUT-[0-9]*' sample.txt