【问题标题】:Copying multiple text lines into a file after specified pattern using shell [closed]使用shell在指定模式后将多个文本行复制到文件中[关闭]
【发布时间】:2018-12-18 04:44:33
【问题描述】:

我想使用 shell 将 file1 中标有模式的多行插入到 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

【问题讨论】:

  • 你尝试了什么?
  • edit 您的问题,以准确阐明导致从该输入获取输出的步骤。
  • @PesaThe 我试过记事本++ ......没有这么多处理 bash 控制台。
  • @EdMorton 我试图在输出中得到这个。先生,不知道该怎么做。
  • 我们知道您不知道该怎么做,我们要求您告诉我们您想要做什么。您是要打印输入中的每个 10 位数字,还是仅打印来自 href="https://example.com/profiles/2016854218" 的数字,或者仅打印来自 src="2016854218_medium.jpg" 的数字或其他内容?预期输出中的其他 2 个数字是从哪里来的 - 它们是输入中的其他地方(如果在示例中包含它们)还是您通过某种算法或其他方式生成它们?等等……

标签: linux bash text awk sed


【解决方案1】:

grep -Eo '\d{10}' file1 &gt; file2

【讨论】:

  • 感谢您的尝试,但此命令不起作用。 file2(输出)为空。
  • 请在您的回答中添加一个简单的解释。谢谢。
【解决方案2】:

编辑: 因为 OP 希望拥有 http 链接的完整值,直到现在所有数字都添加此解决方案。

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

如果您的 Input_file 中有控制 M 字符,请您先执行cat -v Input_file,如果是,请运行dos2unix 实用程序以防万一。如果您没有使用它:

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

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

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

现在,一旦您的控件 Ms 不在 Input_file 上,那么您可以使用以下命令:

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

如果你有更新版本的 GNU awk,你可以删除 --re-interval

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

    • 这是一种脆弱、复杂、低效的方法,并且输出与您所说的想要的输出不匹配。如果您告诉我们您想要做什么,那么您现在已经有了一个很好的解决方案,而不是您发布了 2 个答案,这些答案没有按照您自己的解决方案尝试做,您已经接受了其中一个这会阻止其他人发布答案,并且您有自己的解决方案,这是做任何事情的错误方法,您仍然没有更新您的问题以准确解释您想要做什么。
    • @Andrzej Strzelba,请检查我的编辑答案,如果这有帮助,请告诉我,但你真的应该在一篇文章中说明你的所有要求,否则人们很难理解问题。
    猜你喜欢
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多