2

Tcl の「リスト」に似たシェル スクリプトのコマンドはありますか? 要素のリストをファイルに (それぞれ別の行に) 書き込みたいのですが、要素が特定のパターンに一致する場合、その隣の要素と要素自体を同じ行に出力する必要があります。これを行うためのシェルスクリプトにコマンドはありますか?

例: 私の文字列は " execute the command run abcd.v" のようなものです。各単語をファイルの別々の行に書きたいのですが、単語が "run" の場合、abcd.v と run を同じ行に出力する必要があります。したがって、出力は次のようになります。

execute
the
command
run abcd.v

シェルスクリプトでこれを行う方法は?

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

以下のスクリプトを使用してそれを達成することができます。それは単一のコマンドではありません。以下は、キーワードrunをチェックするifステートメントを持つforループです。改行文字(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 に答える