使用Shell在指定的模式后将多行文本复制到文件中

时间:2018-07-10 11:00:11

标签: linux bash text awk sed

我想使用shell将 中标记有模式的多行插入 file2 中。 模式为10个数字,输入示例始终不同:“ 2016854218”

file1示例(输入)

[...]
    <a class="none" data-container="#fr_5854841" href="https://example.com/profiles/2016854218"></a>
    <div class="new_cl">
        <img src="2016854218_medium.jpg">
    </div>
    <div class="blocker">Novaa<br>
        <span class="friend_small_text">
[...]

file2示例(输出)

2016854218
2016859711
2017076181

3 个答案:

答案 0 :(得分:0)

grep -Eo '\d{10}' file1 > file2

答案 1 :(得分:0)

编辑: :由于OP希望拥有http链接的完整值,直到所有数字也都添加了此解决方案。

awk --re-interval 'match($0,/https:.*[0-9]{10}/){print substr($0,RSTART,RLENGTH)}' Input_file

如果输入文件中有M个字符,请先执行cat -v Input_file,如果可以,请运行dos2unix实用程序(如果有),请先进行操作。如果您没有,请使用:

tr -d '\r' < Input_file > temp_file && mv temp_file Input_file

但上面的命令将删除所有的控制M字符,因此要删除行最后的控制M(以防万一),请使用:

awk '{sub(/\r$/,"")}1' Input_file > temp_file && mv temp_file Input_file

现在,一旦您的控件女士不在Input_file上,则可以使用以下内容:

awk --re-interval 'match($0,/[0-9]{10}/){print substr($0,RSTART,RLENGTH)}' Input_file > Output_file

如果您拥有较新版本的GNU --re-interval,则可以删除awk

答案 2 :(得分:-2)

awk -F'href="' '{print $2}' a |rev | cut -c 4- | rev

这会将整个输入文本剪切为仅链接。

输入:

[...]
    <a class="none" data-container="#fr_5854841" href="https://example.com/profiles/2016854218"></a>
    <div class="new_cl">
        <img src="2016854218_medium.jpg">
    </div>
    <div class="blocker">Novaa<br>
        <span class="friend_small_text">
[...]

输出:

https://example.com/profiles/2016854218