最後の文字がある場合にのみどのように削除できますか?
入力する:
オープンオフィス.org/m openOffice.org/ozm 個人の。 Pfg。 フィル。 教授。 それぞれ。 屋根の長さ/メートル ローン海峡
希望の出力:
オープンオフィス.org オープンオフィス.org パース プルーガー フィル 教授 回答 ロンステル ロンスター
これまではドットだけを残しましたが、残念ながら最後のsedコマンドでは文字も削除されましたg
。
$ cat filename | grep "\." | cut -d"/" -f1 | sed 's/.$//'
答え1
コマンドのポイントを超えて、sed
すべてがうまくいくでしょう。このように:
sed 's/\.$//'
エスケープしないと、.$
文字列の末尾にあるすべての文字と一致するためです。
また、sed
すべての++を1つに入れることもできます。grep
cut
sed
sed 's=/[^/]*$==;s/\.$//' filename
答え2
文字を削除する存在する場合のみパラメータ拡張が正確に説明する内容です。
$ var=path.
$ echo "$var ${var%.}"
path. path
この場合、点は特別ではありません(正規表現では点は特別です)。
他のパターンは、次のコマンドを使用して削除できます%/*
。
$ var=openOffice.org/ozm
$ echo "${var%/*}"
openOffice.org
両方を削除するには:
$ var=roonstr./ozm
$ var=${var%/*}
$ var=${var%.}
$ echo "$var"
roonstr
もちろん、ソースファイルを処理するには、そのファイルにsedを使用する方が高速です。
参照点だけを覚えておいてください(文字通り一致、そうでなければすべての文字を意味します)。
$ sed 's,/.*,,;s,\.$,,' file
答え3
正規表現を少し変更するだけです。脱出する.
必要はありません。grep
cat filename | cut -d"/" -f1 | sed 's/\.$//'