【问题标题】:Sed Command get text between two string while excluding the two strings using Terminal UNIXSed 命令获取两个字符串之间的文本,同时使用终端 UNIX 排除两个字符串
【发布时间】:2013-03-29 01:59:28
【问题描述】:

所以我有一个如下所示的 sed 命令:

sed -n "/DXImageTransform.Microsoft.AlphaImageLoader(src='/,/',sizingMethod='crop');/p"
/Users/ME/Documents/weather/yahooWeather.html > /Users/ME/Documents/weather/out.txt

它正确地从文件中获取了我想要的 HTML,但是它仍然有我用来搜索它的字符串(即 "DXImageTransform.Microsoft.AlphaImageLoader(src='" & "',sizingMethod=' crop');" 在文件的开头和结尾。我想删除这两个字符串。如何修改我的命令来执行此操作?

【问题讨论】:

    标签: linux unix command-line terminal


    【解决方案1】:

    这应该可行:

    sed -n -e "1,/START/d" -e "/END/,$d" -e p file.html
    

    我在那里使用-e 选项分隔了 3 个命令,但您可以将它们全部放在一起,用; 分隔。

    他们就是这样做的:

    • 1,/START/d -- 删除一个范围:从文件的第一行到匹配模式 /START/ 的行
    • /END/,$d -- 删除一个范围:从匹配模式的行到文件末尾
    • p -- 打印该行(这些行与之前的模式不匹配)

    更新

    如果模式在第一行,上述方法将不起作用。使用 GNU sed,您可以像这样修复它:

    sed -n -e "0,/START/d" -e "/END/,$d" -e p file.html
    

    很遗憾,这不适用于 BSD sed

    【讨论】:

    • 我注意到如果第一个模式在第一行,这会中断。使用0,/START/d 作为第一个命令解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 2014-10-03
    • 2013-04-02
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多