私は次のような文字列を持っています:
abc.out
def.out
部分文字列を削除するにはどうすればよいですか
。アウト
これらの文字列で?
どのコマンドを使用すればよいですか? (ボーンシェル)
複数の方法、選択:
str=abc.out
シェル:
echo ${str%.*}
Grep:
echo $str | grep -o '^[^\.]*'
sed:
echo $str | sed -E 's/(.*?)\..*/\1/'
Awk:
echo $str | awk -F. '{print $1}'
-F.
文字列を。で分割することを意味します。そして$1
最初の列を意味します。
切る:
echo $str | cut -d. -f1
すべての出力:
abc
これらの文字列がファイルに保存されている場合( と呼びましょうinput_file
):
# input_file:
abc.out abc.out abc.out
def.out def.out
def.out
できるよ:
sed -i 's/\.out//g' input_file
これにより、そのファイルから部分文字列がすべて削除.out
されます。
説明:
sed
: sedツールを呼び出して、テキストのストリームを編集します-i
: 「インプレース」オプションを使用します。これにより、出力を書き込む代わりに、指定した入力ファイルが変更されます。stdout
's/\.out//g'
: 正規表現を使用して削除し.out
ます。最後のg
は、すべての出現を削除することを意味します。input_file
: 入力ファイルを指定これらの文字列が変数に格納されている場合:
var1="abc.out"
パラメータ置換を使用できます:
var1=${var1%.out}
echo "$var1"
abc
説明:
使用したいパターンは変数にある可能性があるため、これが最もうまく機能することがわかりました。
DATA="abc.out"
pattern=".out"
DATA=${DATA/$pattern/}
echo "DATA=${DATA}"
結果は次のとおりです。
abc
$ foo=abc.def.out
$ echo ${foo%.out}
abc.def
一般に、最短サフィックスを削除するには、次を使用します。
$ echo ${foo%.*}
abc.def
最長の接尾辞を削除するには、次を使用します
$ echo ${foo%%.*}
abc
これらがファイル名の場合は、basename を使用できます。
$ basename a.out .out
あなたに与える:
a