标签: substitution

JavaScript - 替换字符串中的所有逗号

我有一个包含多个逗号的字符串,字符串替换方法只会更改第一个:

var mystring = "this,is,a,test"
mystring.replace(",","newchar", -1)
Run Code Online (Sandbox Code Playgroud)

结果:"thisnewcharis,a,test"

文档指出默认值替换all,并且"-1"也表示替换all,但是不成功.有什么想法吗?

javascript string replace substitution

348
推荐指数
3
解决办法
67万
查看次数

命令替换:反引号或美元符号/封闭?

在bash中执行命令替换的首选方法是什么?

我总是这样做:

echo "Hello, `whoami`."
Run Code Online (Sandbox Code Playgroud)

但最近,我经常看到它写得像这样:

echo "Hello, $(whoami)."
Run Code Online (Sandbox Code Playgroud)

什么是首选语法,为什么?或者他们几乎可以互换?

我倾向于赞成第一个,因为我的文本编辑器似乎知道它是什么,并且适当地进行语法高亮.

在这里读到,在每种情况下,转义字符的行为都有所不同,但我不清楚哪种行为更可取,或者它只取决于具体情况.

附带问题:在一个脚本中使用两个表单是不好的做法,例如嵌套命令替换时?

bash shell command substitution

160
推荐指数
3
解决办法
5万
查看次数

bash:糟糕的替代

#!/bin/bash

jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
Run Code Online (Sandbox Code Playgroud)

这个bash脚本在Ubuntu上给了我错误的替换错误.任何帮助将受到高度赞赏.

string bash ubuntu substitution

116
推荐指数
7
解决办法
20万
查看次数

sed错误:"s'命令的RHS上的无效引用\ 1"

我运行几个替换命令作为mavencolorize脚本的核心.其中的sed命令,使用正则表达式,在shell工作发现这里讨论.可以在此处找到当前(不工作)的实现.

当我将该命令的一个变体包含到脚本中时,会发生不同的行为:

变式1:

$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Run Code Online (Sandbox Code Playgroud)

适应脚本:

-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Run Code Online (Sandbox Code Playgroud)

错误: shell输出的信息与我输入的信息相同$ sed.奇怪!?


变式2:

$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Run Code Online (Sandbox Code Playgroud)

适应脚本:

-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Run Code Online (Sandbox Code Playgroud)

错误:

sed:-e表达式#7,char 59:`s'命令的RHS上的引用\ 1无效

regex sed substitution

85
推荐指数
4
解决办法
7万
查看次数

用Vim中的文件中的其他地方替换寄存器或行的内容

我正在使用Vim,我想用一个长字符串替换一些占位符文本,该字符串跨越多行,这些行已经写入文件中的其他位置.

是否可以用寄存器的内容替换模式?就像是

:%s/foo/<contents of register A>
Run Code Online (Sandbox Code Playgroud)

否则,是否可以用一系列线代替?就像是

:%s/foo/<content of lines from 10 to 15>
Run Code Online (Sandbox Code Playgroud)

vim replace substitution

65
推荐指数
2
解决办法
9455
查看次数

如何避免heredoc扩展变量?

我正在尝试使用来自ENV的替换字符串创建脚本文件,但也希望防止一些​​转义

export PLACEHOLDER1="myPlaceholder1Value"
export PLACEHOLDER2="myPlaceholder2Value"
sudo /bin/su -c "cat << EOF > /etc/init.d/my-script
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          my-script
# Required-Start:    \$remote_fs \$syslog
# Required-Stop:     \$remote_fs \$syslog
# Should-Start:      \$network \$time
# Should-Stop:       \$network \$time
# Default-Start:     2 3 4 5 
# Default-Stop:      0 1 6
# Short-Description: blabla
# Description:       bla bla desc
#
### END INIT INFO
#
myvariable_1=toto$PLACEHOLDER1
myvariable_2=titi$PLACEHOLDER2
myvariable_final=\"dynamicvar=\${myvariable_1},\${myvariable_2}\"
EOF
"
Run Code Online (Sandbox Code Playgroud)

由于myvariable_final没有被转义并被替换为init脚本依赖项中的一个($ remote_fs,$ syslog,$ network,$ time),因此结果不好.

#!/bin/bash
#
### BEGIN INIT …
Run Code Online (Sandbox Code Playgroud)

bash escaping heredoc substitution

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

用bash变量替换sed

尝试使用带有该行的bash脚本中的sed更改文本文件中的值,

sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp
Run Code Online (Sandbox Code Playgroud)

这将是一个for循环.不知道为什么它不起作用.有什么建议?

bash sed substitution

52
推荐指数
3
解决办法
6万
查看次数

如何在Perl替换运算符的替换端使用变量?

我想做以下事情:

$find="start (.*) end";
$replace="foo \1 bar";

$var = "start middle end";
$var =~ s/$find/$replace/;
Run Code Online (Sandbox Code Playgroud)

我希望$ var包含"foo middle bar",但它不起作用.也不是:

$replace='foo \1 bar';
Run Code Online (Sandbox Code Playgroud)

不知怎的,我错过了关于逃避的事情.


我修复了失踪的's'

regex perl substitution

45
推荐指数
4
解决办法
10万
查看次数

从字符串内删除所有换行符

我正在尝试从字符串中删除所有换行符.我已经读过如何做到这一点,但似乎我出于某种原因无法这样做.这是我正在做的一步一步:

string1 = "Hello \n World"
string2 = string1.strip('\n')
print string2
Run Code Online (Sandbox Code Playgroud)

我仍然在输出中看到换行符.我也尝试过使用rstrip,但我仍然看到换行符.谁能解释为什么我这样做错了?谢谢.

python string newline substitution

36
推荐指数
3
解决办法
11万
查看次数

如何替换git历史文件中的文本?

我一直使用基于接口的git客户端(smartGit),因此对git控制台没有多少经验.

但是,我现在需要在历史记录中替换所有.txt文件中的字符串(因此,不要删除整个文件而只是替换字符串).我找到了以下命令:

git filter-branch --tree-filter 'git ls-files -z "*.php" |xargs -0 perl -p -i -e "s#(PASSWORD1|PASSWORD2|PASSWORD3)#xXxXxXxXxXx#g"' -- --all
Run Code Online (Sandbox Code Playgroud)

我试过这个,不幸的是注意到密码确实发生了变化,所有二进制文件都被破坏了.图像等都会被破坏.

有没有更好的方法来做到这一点,不会破坏我的二进制文件?

谢谢.

编辑:

我搞砸了什么.导致二进制文件损坏的实际代码是:

$ git filter-branch --tree-filter "find . -type f -exec sed -i -e 's/originalpassword/newpassword/g' {} \;"
Run Code Online (Sandbox Code Playgroud)

顶部的代码实际上使用我的密码奇怪地删除了所有文件.

git version-control substitution git-filter-branch git-rewrite-history

35
推荐指数
5
解决办法
1万
查看次数