2

shell 脚本中是否有任何类似于 tcl 中的“list”的命令?我想将元素列表写入文件(每个都在单独的行中)。但是,如果元素与特定模式匹配,则它旁边的元素和元素本身应该打印在同一行中。shell脚本中是否有任何命令可以执行此操作?

示例:我的字符串类似于“执行命令 run abcd.v” 我想将每个单词写在文件的单独行中,但如果单词是“run”,则 abcd.v 和 run 必须打印在同一行中。所以,输出应该是这样的,

execute
the
command
run abcd.v

如何在 shell 脚本中做到这一点?

4

3 回答 3

1
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

于 2012-11-21T04:55:06.653 回答
0

以下是在 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
于 2012-11-21T02:35:29.053 回答
0

您可以使用以下脚本来完成它。它不会是一个单一的命令。下面是一个 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
于 2012-11-21T02:36:47.483 回答