在我的脚本中,我正在获取一个文本文件并逐行浏览文件并将字符串“test”替换为“true”,然后将其重定向到新文件。这是我的代码:
cat $FILENAME | while read LINE
do
echo "$LINE" | sed -e `s/test/true/g` > $NEWFILE
done
然而,当我执行脚本时,我收到以下错误:
/home/deploy/KScript/scripts/Stack.sh: line 46: s/test/true/g: No such file or directory
sed: option requires an argument -- e
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
-c, --copy
use copy instead of rename when shuffling files in -i mode
(avoids change of input file ownership)
-l N, --line-length=N
specify the desired line-wrap length for the `l' command
--posix
disable all GNU extensions.
-r, --regexp-extended
use extended regular expressions in the script.
-s, --separate
consider files as separate rather than as a single continuous
long stream.
-u, --unbuffered
load minimal amounts of data from the input files and flush
the output buffers more often
--help display this help and exit
--version output version information and exit
你能帮我找一下我做错的事吗?
答案 0 :(得分:2)
对于这样的错误,请将set -x
放在echo "$LINE" | sed -e 's/test/true/g' > $NEWFILE
set +x
echo "$LINE" | sed -e `s/test/true/g` > $NEWFILE
然后Bash会在执行它之前打印命令行,引用参数。这应该可以让你知道它失败的原因。
确保使用正确的引号字符。 `(反引号)和'(单引号)是不同的东西。第一个将尝试执行命令s/test/true/g
并将此命令的结果传递给sed
答案 1 :(得分:1)
使用sed时,您应该用单引号或双引号引用替换参数。
例如,这应该有效:
echo "$LINE" | sed -e "s/test/true/g" > $NEWFILE
答案 2 :(得分:0)
sed可以通过读取文件并将脚本应用到每一行来工作,这非常像你在脚本中所做的那样。所以你只想:
sed -e 's/test/true/g' "$FILENAME" > "$NEWFILE"
备注:此处-e
参数是可选的,因为您只有一个脚本。