【问题标题】:Read and delete text between two strings in perl在 perl 中读取和删除两个字符串之间的文本
【发布时间】:2023-03-11 04:56:01
【问题描述】:

我需要一种方法来读取和删除在某个文件中找到的两个不同字符串之间的文本,然后删除这两个字符串。就像一个“剪切命令”。我想将文本存储在变量中。

我看到了关于在两个字符串之间读取文本的帖子,但我也不知道如何删除它。

我打算在 bash 中执行存储的文本。效率是可取的。此脚本不会用于大文件,但它可能会按顺序执行多次,因此脚本运行得越快越好。

存储的文本通常会有特殊字符。

谢谢

【问题讨论】:

    标签: perl string parsing cut


    【解决方案1】:

    通过环境指定开始和结束字符串,以及在 perl 命令行上使用的文件:

    export START_STRING='abc def'
    export END_STRING='ghi jkl'
    perl -0777 -i -wpe's/\Q$ENV{START_STRING}\E(.*)\Q$ENV{END_STRING}\E/s;print STDERR $1' file_to_use 2>savedtext
    

    【讨论】:

    • 当我在命令提示符下键入它时,它不会将文本保存到已保存的文本中。当我输入 echo $savedtext 时,我得到一个空格。然而,它确实删除了正确的文本——但前提是 string1 不是第一个单词。如果 string1 是第一个单词,那么它会删除所有内容,但仍然没有保存文本。
    • 更好的例子:$text="foostringbar"; $text =~ s/foo(.*?)bar//i; $cut=$1; print $cut;
    • @Feynman:perl 版本,操作系统?您能否粘贴您运行但似乎不起作用的实际命令?
    • Perl 版本:5.10.0,操作系统:Debian。乐意。它实际上是一个 shell 脚本的一部分(我已经习惯了把所有东西都变成一个 shell 脚本,我忘记了我可以直接用 perl 编译它)。 #!/bin/bash perl -0777 -i -wpe's/$ARGV[0](.*)$ARGV[1]//s;print STDERR $1' $3 2>savetext 实际上,只要让模块执行介于两者之间的任何内容将字符串作为 shell 脚本而不是将其保存为变量将是理想的。保存是一个有用的工具,但不是我需要的。
    • 还有 vol7ron——如何让 $text 成为文件的文本而不是输入?我将文件名放在 中,但您可能已经猜到这不起作用。
    猜你喜欢
    • 2019-01-24
    • 2017-09-13
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多