我想要做:
cat update_via_sed.sh | sed 's/old_name/new_name/' > new_update_via_sed.sh
Run Code Online (Sandbox Code Playgroud)
在我的程序中。
但我想使用变量,例如
old_run='old_name_952'
new_run='old_name_953'
Run Code Online (Sandbox Code Playgroud)
我试过使用它们,但没有发生替换(没有错误)。我试过了:
cat update_via_sed.sh | sed 's/old_run/new_run/'
cat update_via_sed.sh | sed 's/$old_run/$new_run/'
cat update_via_sed.sh | sed 's/${old_run}/${new_run}/'
Run Code Online (Sandbox Code Playgroud) 我有一个包含以下内容的文件:
zdk
aaa
b12
cdn
dke
kdn
Run Code Online (Sandbox Code Playgroud)
输入 1:aaa
和cdn
输出 1:
aaa
b12
cdn
Run Code Online (Sandbox Code Playgroud)
输入 2:zdk
和dke
输出 2:
zdk
aaa
b12
cdn
dke
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令来实现:
grep -a aaa -A2 file # Output 1
grep -a aaa -A4 file # Output 2
Run Code Online (Sandbox Code Playgroud)
但是在文件中我不知道结束字符串模式的确切出现(位置)是什么(文件有 20000 行)
我怎样才能做到这一点?
我有一个脚本,它读取文本流并生成一个 sed 命令文件,该文件稍后使用sed -f
. 生成的 sed 命令如下:
s/cid:image002\.gif@01CC3D46\.926E77E0/https:\/\/mysite.com\/files\/1922/g
s/cid:image003\.gif@01CC3D46\.926E77E0/https:\/\/mysite.com\/files\/1923/g
s/cid:image004\.jpg@01CC3D46\.926E77E0/https:\/\/mysite.com\/files\/1924/g
Run Code Online (Sandbox Code Playgroud)
假设生成sed
命令的脚本类似于:
while read cid fileid
do
cidpat="$(echo $cid | sed -e s/\\./\\\\./g)"
echo 's/'"$cidpat"'/https:\/\/mysite.com\/files\/'"$fileid"'/g' >> sedscr
done
Run Code Online (Sandbox Code Playgroud)
如何改进脚本以确保cid
字符串中的所有正则表达式元字符都被正确转义和插入?