shell脚本中是否有类似于tcl中的"list"的命令?我想将元素列表写入文件(每个元素在单独的行中)。但是,如果元素与特定模式匹配,则它旁边的元素和元素本身应在同一行中打印。shell脚本中是否有任何命令可以执行此操作?
示例:我的字符串类似于"执行命令运行 abcd.v"我想将每个单词写在文件的单独行中,但如果单词是"run",那么 abcd.v 和 run 必须打印在同一行中。所以,输出应该是这样的,
execute
the
command
run abcd.v
如何在 shell 脚本中执行此操作?
line="execute the command run abcd.v"
for word in $line # the variable needs to be unquoted to get "word splitting"
do
case $word in
run|open|etc) sep=" " ;;
*) sep=$'n' ;;
esac
printf "%s%s" $word "$sep"
done
请参阅 http://www.gnu.org/software/bash/manual/bashref.html#Word-Splitting
以下是在 bash 中执行此操作的方法:
- 将以下脚本命名为
list
- 将其设置为可执行文件
- 将其复制到您的
~/bin/
:
List:
#!/bin/bash
# list
while [[ -n "$1" ]]
do
if [[ "$1" == "run" ]]; then
echo "$1 $2"
else
echo "$1"
fi
shift
done
这是您可以在命令提示符下使用它的方式:
list execute the command run abcd.v > outputfile.txt
您的outputfile.txt
将写成:
execute
the
command
run abcd.v
您可以使用以下脚本完成它。 它不会是一个单一的命令。 下面是一个 for 循环,它有一个 if 语句来检查关键字 run。 它不附加换行符(echo -n
)。
for i in `echo "execute the command run abcd.v"`
do
if [ $i = "run" ] ; then
echo -n "$i " >> fileOutput
else
echo $i >> fileOutput
fi
done