小编por*_*org的帖子

sed - 只从多行输入中获取替换的字符串并省略不匹配的行!

我希望 sed省略所有不匹配的行,并且只输出替换的字符串(单个/多个预期行/ s).

换句话说:我有一个干草堆,只想要针回来,而不是所有被搜查的干草,并且保持不变.

或者换句话说:在多行字符串中搜索/替换RegEx描述的字符串,并且只返回该字符串.(因为可以使用PHP函数http://www.php.net/manual/en/function.preg-replace.php)

我目前的解决方法是首先使用grep进行过滤,然后仅将匹配的行传输到sed中进行替换:

echo -e "Bla\nBla\nImportant1: One \nBla\nImportant2: Two\nBla\nBla" | egrep "^Important1.*$" | sed -E "s/^Important1: *\b(.*)\b */\1/g"
# From the multiple line input I only want the "One One" (with pre/post whitespace removed, hence matching the word boundaries with "\b")
# And I want no "Bla bla" lines in the result!
Run Code Online (Sandbox Code Playgroud)

但我想在sed中有一个单一的解决方案.或者这是出于预期的sed用法,我应该更好地使用其他东西吗?顺便说一句,问题:使用反向引用的多线sed似乎有点相关,但我不确定!

regex replace sed multiline

18
推荐指数
3
解决办法
2万
查看次数

zsh 无法在 ~/bin 中找到或执行自定义用户脚本,尽管它们是可执行的并且位于 $PATH 环境变量中

问题:

我最近从 macOS Mojave 10.14.6 升级到 macOS Catalina 10.5.5。

现在这zsh是默认的 shell,我将其迁移.bashrc.zshrc

  • 别名工作正常。
  • 但由于某些无法解释的原因,我的自定义用户脚本在~/bin/my/~/bin/dev/
    • 未通过自动完成完成
    • 完全输入时无法唤起,然后我得到zsh: command not found: myScript.sh

调查与故障排除:

  • 当将 shell 改回 bash 时,一切仍然有效,因此可以排除操作系统更新导致的数据丢失/损坏,这一定是配置问题。
  • 我的所有脚本文件都有可执行标志。
  • 它们所在的目录位于 $PATH 环境变量中。
    • 证明:echo $PATH给出/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/usr/local/sbin:~/bin/bin:~/bin/my:~/bin/dev:

实验:

  • 我尝试设置/附加 $PATH 变量,带或不带export。--> 没有区别。
  • 我尝试了各种可能的配置文件: .zprofile .zshrc --> 没有区别。
  • 我硬链接了 bash 和 zsh 配置文件并包含:alias test123="echo test123"
    • 此别名适用于 bash 和 zsh。所以这不可能是加载配置文件链中的问题。
  • 我尝试了不同的 shebang 语法 --> 没有区别。无论如何,使用完整路径直接调用始终有效。

macos config zsh environment-variables macos-catalina

4
推荐指数
1
解决办法
1034
查看次数