13

シェルスクリプトを使用して特定の文字列から最後のn文字を削除するにはどうすればよいですか?

これは私の入力です:

ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,

出力は次の形式である必要があります。

ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
4

4 に答える 4

42

string の最後の n 文字を切り取ることを指定して質問のタイトルに答えるには、Bash の部分文字列抽出機能を使用できます。

me@home$ A="123456"
me@home$ echo ${A:0:-2}  # remove last 2 chars
1234

ただし、例に基づいて、末尾のコンマをすべて削除したいようです。その場合は、を使用できますsed 's/,*$//'

me@home$ echo "ssl01:49188,ssl999999:49188,,,,," | sed 's/,*$//'
ssl01:49188,ssl999999:49188

または、純粋な Bash ソリューションの場合は、部分文字列の削除を使用できます。

me@home$ X="ssl01:49188,ssl999999:49188,,,,,"
me@home$ shopt -s extglob
me@home$ echo ${X%%+(,)}
ssl01:49188,ssl999999:49188

変換をファイル全体に適用する必要がある場合はこのアプローチを使用しsed、ターゲット文字列が既に bash 変数にある場合は bash 部分文字列削除アプローチを使用します。

于 2013-01-15T13:11:29.600 に答える
11

sed:

sed 's/,\+$//' file
于 2013-01-15T13:09:00.393 に答える
1

sedの使用:

sed 's/,,*$//g' file 
于 2013-01-15T13:13:55.477 に答える
1

,不要なものを削除する必要があると思います

sed 's/,,//g;s/\,$//g' your_file

テスト済み:

> cat temp
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,
> sed 's/,,//g;s/\,$//g' temp
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
> 
于 2013-01-15T13:09:20.447 に答える