web-dev-qa-db-ja.com

シェルスクリプトを使用して文字列の最後のn文字を切り取る

シェルスクリプトを使用して特定の文字列からすべての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
13
anish

質問のタイトルに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サブストリング削除アプローチを使用します。

40
Shawn Chin

sedの場合:

sed 's/,\+$//' file
11
cmbuckley

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

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
> 
1
Vijay

Sedの使用:

sed 's/,,*$//g' file 
1
Guru