.
各数字の先頭または末尾から文字を削除する方法は?
注 -perl
ライナーも良い選択肢ですsed
。
入力例:
.23.12.44.5.
.233.3.3.3
23.4.5.3.2..
....33.2.3.45.5
.3.3.2.....
予想出力:
23.12.44.5
233.3.3.3
23.4.5.3.2
33.2.3.45.5
3.3.2
(行はスペース(スペースまたはタブ)で終わるか開始することができるので、それを維持する必要があります。)
答え1
標準構文の使用(OPでSolarisに言及した後):
sed 's/^\([[:blank:]]*\)\.*/\1/;s/\.*\([[:blank:]]*\)$/\1/'
Solarisでは、いつものように電話をかけたり/usr/xpg4/bin/sed
、command -p sed
答え2
ここにあります:
sed -e 's/^\(\s*\)\.\+/\1/;s/\.\+\s*$//' your_file
これにより、変更されたファイルが標準出力として印刷されます。別のファイルに書き込むには、次のようにします。
sed -e 's/^\(\s*\)\.\+/\1/;s/\.\+\s*$//' your_file >new_file
ファイルを適切に変更するには、次のようにします。
sed -i -e 's/^\(\s*\)\.\+/\1/;s/\.\+\s*$//' your_file
編集する
- (可能な)先行または末尾のスペースを説明するために正規表現を修正しました。
- 先行スペースを保存するために、manatworkの説明に基づいて正規表現を修正しました。
答え3
$ cat foo
.23.12.44.5.
.233.3.3.3
line1
23.4.5.3.2..
....33.2.3.45.5
.3.3.2.....
line2
$ sed 's/^ *\.*//;s/\.* *$//' foo
23.12.44.5
233.3.3.3
line1
23.4.5.3.2
33.2.3.45.5
3.3.2
line2