繁体   English   中英

将 sed 命令行字符串作为变量传递给 bash

[英]Passing sed command line string to bash as variable

我有一个 bash 脚本,它使用一个多行 sed 命令来更改文件。 从命令行,此行有效:

sed -e '1a\' -e '/DELIMITER="|" \' -e '/RESTRICT_ADD_CHANGE=1 \' -e '/FIELDS=UPDATE_MODE|PRIMARYKEYVALUE|PATRONFLAGS' -e '1 d' general_update_01 > general_update_01.mp

我对各种文件使用相同的 bash 脚本。 因此,我需要将来自发送应用程序的所有 sed 命令作为单个参数传递给 bash 脚本。 但是,当它从应用程序传入时,我只得到-e。

在 bash 脚本中,我尝试了多种方法将变量作为完整字符串接收。 这些都不存储变量。

sed_instructions=$(echo $6)
sed_instructions=$6
sed_instructions=$(eval "$6")

以及其他一些配置。

我的命令行会使用这样的变量:

sed $sed_instructions $filename > $filename.mp

我假设您像这样调用您的 shell 脚本

script.sh -e '1a' -e '/DELIMITER="|" ' -e '/RESTRICT_ADD_CHANGE=1 ' -e '/FIELDS=UPDATE_MODE|PRIMARYKEYVALUE|PATRONFLAGS' -e '1 d' general_update_01

您在这里要做的是将第 n 个参数存储为文件名,并将前 n-1 个参数存储在数组中

#!/usr/bin/env

n=$#
filename=${!n}
sed_commands=("${@:1:n-1}")

# Now, call sed
sed "${sed_commands[@]}" "$filename" > "${filename}.mp"

为了演示该代码的实际作用:

$ set -- one two three four
$ n=$#
$ filename=${!n}
$ args=("${@:1:n-1}")
$ declare -p filename args
declare -- filename="four"
declare -a args=([0]="one" [1]="two" [2]="three")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM