シェルスクリプトを使用して特定の文字列からすべての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
質問のタイトルに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サブストリング削除アプローチを使用します。
sed
の場合:
sed 's/,\+$//' file
不要な,
を削除する必要があると思います
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
>
Sedの使用:
sed 's/,,*$//g' file