![](/img/trans.png)
[英]Using bash, how do I find all files containing a specific string and replace them with an existing file?
[英]How do I check if a string containing variables is present in a specific file in bash?
我有两个文件:
~/.bash.local # $LOCAL_BASH_CONFIG_FILE
~/.fish.local # $LOCAL_FISH_CONFIG_FILE
我正在将配置动态添加到bash脚本中的每个文件。 如果用于bash
,则使用~/.bash_profile
解析每个文件~/.config/fish/config.fish
如果用于fish
则使用~/.config/fish/config.fish
解析每个文件。 实现这些配置。
但是,我不想每次运行bash脚本时都将配置二进制文件的行添加到两个文件中。 我希望它执行以下操作:
BASH_CONFIG
或FISH_CONFIG
) printf
到指定文件中。 我下面的脚本的目的是使用n-install安装 npm
软件包n
,并将适当的配置添加到bash
和fish
。
execute
是我定义的在后台运行任务并使用微调器在屏幕上显示消息的功能。
add_n_configs() {
# bash
declare -r BASH_CONFIGS="
# n - Node version management.
export N_PREFIX=\"\$HOME/n\";
[[ :\$PATH: == *\":\$N_PREFIX/bin:\"* ]] || PATH+=\":\$N_PREFIX/bin\"
"
execute \
"printf '%s\n' '$BASH_CONFIGS' >> $LOCAL_BASH_CONFIG_FILE \
&& . $LOCAL_BASH_CONFIG_FILE" \
"n (update $LOCAL_BASH_CONFIG_FILE)"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# fish
declare -r FISH_CONFIGS="
# n - Node version management.
set -xU N_PREFIX \"\$HOME/n\"
set -U fish_user_paths \"\$N_PREFIX/bin\" \$fish_user_paths
"
execute \
"printf '%s\n' '$FISH_CONFIGS' >> $LOCAL_FISH_CONFIG_FILE" \
"n (update $LOCAL_FISH_CONFIG_FILE)"
}
经过一些研究,似乎可以使用grep
这样完成此任务:
if ! grep -q "$BASH_CONFIGS" "$LOCAL_BASH_CONFIG_FILE"; then
execute \
"printf '%s\n' '$BASH_CONFIGS' >> $LOCAL_BASH_CONFIG_FILE \
&& . $LOCAL_BASH_CONFIG_FILE" \
"n (update $LOCAL_BASH_CONFIG_FILE)"
fi
if ! grep -q "$FISH_CONFIGS" "$LOCAL_FISH_CONFIG_FILE"; then
execute \
"printf '%s\n' '$FISH_CONFIGS' >> $LOCAL_FISH_CONFIG_FILE" \
"n (update $LOCAL_FISH_CONFIG_FILE)"
fi
grep
是一个命令行实用程序,可以使用常见的正则表达式语法搜索和过滤文本。
要搜索确切的字符串: grep search_string path/to/file
要在安静模式下搜索精确的字符串: grep -q search_string path/to/file
grep -q
只会搜索文件,直到找到匹配项为止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.