如何替换。。从bash脚本中的字符串开始?
我必须从Bash脚本中的文件中删除如何替换。。从bash脚本中的字符串开始?,bash,Bash,我必须从Bash脚本中的文件中删除。字符。例如: 我有一些字符串,比如: some/../path/to/file some/ab/path/to/file 更换后,它应该是 some/path/to/file some/ab/path/to/file 我使用了下面的代码 DUMMY_STRING=/../ TEMP_FILE=./temp.txt sed s%${DUMMY_STRING}%/%g ${SRC_FILE} > ${TEMP_FILE} cp ${TEMP_FILE}
。
字符。例如:
我有一些字符串,比如:
some/../path/to/file
some/ab/path/to/file
更换后,它应该是
some/path/to/file
some/ab/path/to/file
我使用了下面的代码
DUMMY_STRING=/../
TEMP_FILE=./temp.txt
sed s%${DUMMY_STRING}%/%g ${SRC_FILE} > ${TEMP_FILE}
cp ${TEMP_FILE} ${SRC_FILE}
它正在替换第1行中的/../
;但它也从第二行删除了/ab/
。这是不可取的。我知道它正在考虑/../
,因为某些正则表达式和/ab/
与此正则表达式匹配。但我只想替换那些/../
请提供一些帮助
谢谢
NN在
sed
中,
是一个元字符,意思是“任何字符”。要隐藏其特殊含义,请使用反斜杠将其转义:
sed -e 's%/\.\./%/%g' $src_file > $temp_file
请注意,在删除类似的/../
之后,您引用的是不同的文件。要引用与以前相同的名称(在没有符号链接的情况下,这会使事情变得复杂),您需要删除/../
前面的目录组件。因此:
some/../path/to/file
path/to/file
引用同一个文件,假设some
是一个目录,而不是其他地方的符号链接,但一般来说,some/path/to/file
是一个不同的文件(尽管符号链接可能会混淆该断言)
注意在
echo
命令中,在变量“$x”
周围小心地使用了双引号。我可以在作业中使用单引号或双引号,也可以得到相同的结果
使用标准的
sed
(shell是/bin/sh
,又名bash
3.2.X)在Mac OS X 10.7.4上进行测试,但在任何系统上的结果都是相同的。
是sed
中的元字符,意思是“任何字符”。要隐藏其特殊含义,请使用反斜杠将其转义:
sed -e 's%/\.\./%/%g' $src_file > $temp_file
请注意,在删除类似的/../
之后,您引用的是不同的文件。要引用与以前相同的名称(在没有符号链接的情况下,这会使事情变得复杂),您需要删除/../
前面的目录组件。因此:
some/../path/to/file
path/to/file
引用同一个文件,假设some
是一个目录,而不是其他地方的符号链接,但一般来说,some/path/to/file
是一个不同的文件(尽管符号链接可能会混淆该断言)
注意在
echo
命令中,在变量“$x”
周围小心地使用了双引号。我可以在作业中使用单引号或双引号,也可以得到相同的结果
使用标准的
sed
(shell是/bin/sh
,又名bash
3.2.X)在Mac OS X 10.7.4上进行测试,但在任何系统上的结果都是一样的。这并没有按预期工作。它还删除了我不想要的“/tx/”。我只想让序列“/…/”替换为“/”。@Niranjan:您是在sed
脚本中使用单引号还是双引号?它们是不可互换的——至少在这种情况下是不可互换的。或者你仍然没有使用任何引号?如果不使用单引号,则必须使用更多反斜杠。根据经验,除非需要插入shell变量,否则请将sed
脚本用单引号括起来。明白了。我根本没有在SED命令中使用任何引号。你的建议是建议使用单一报价。这个单引号sed-e的%/\.\./%/%g'${SRC\u FILE}>${TEMP\u FILE}
解决了这个问题。谢谢你的帮助。非常感谢。这不是我们想要的。它还删除了我不想要的“/tx/”。我只想让序列“/…/”替换为“/”。@Niranjan:您是在sed
脚本中使用单引号还是双引号?它们是不可互换的——至少在这种情况下是不可互换的。或者你仍然没有使用任何引号?如果不使用单引号,则必须使用更多反斜杠。根据经验,除非需要插入shell变量,否则请将sed
脚本用单引号括起来。明白了。我根本没有在SED命令中使用任何引号。你的建议是建议使用单一报价。这个单引号sed-e的%/\.\./%/%g'${SRC\u FILE}>${TEMP\u FILE}
解决了这个问题。谢谢你的帮助。非常感谢你。