次の形式のファイルからユーザー名と携帯電話をインポートするスクリプトがあります。
**Current Format**
username mobile
zzz 03333012345
123 03212334343
245 3712323689
携帯電話番号が「0」から始まる場合は、「0」だけを削除して、すべての携帯電話番号が次のように表示されるようにしたいと思います。
**Required format:**
username mobile
zzz 3333012345
123 3212334343
245 371232368
(電話が0なしで始まる場合はそのままにしてください)
答え1
次のawkを使用して、2番目の列の先行ゼロのみを削除することができます。
awk '{gsub("^0","",$2); print $1,$2}' yourfile.txt
答え2
次のコードスニペットを試してください。
sed 's/\ [0]//g' テスト.1
[前にスペースがあることに注意してください。
例えば
root@SHW:/tmp # cat test.1
**Current Format**
username mobile
zzz 03333012345
123 03212334343
245 3712323689
root@SHW:/tmp # sed 's/\ [0]//g' test.1
**Current Format**
username mobile
zzz 3333012345
123 3212334343
245 3712323689
私のubuntu-14.04で動作します
答え3
パールの使用:
< inputfile perl -pe 's/ 0([0-9]+)$/ $1/' > outputfile
-p
:while (<>) {[...]}
スクリプトの周りにループを配置し、処理された行を印刷します。-e
:パラメータからスクリプトを読む
Perlコマンドの分析:
s
: 置換を実行するためのアサーション/
:スタートモード0([0-9]+)$
:行の末尾にゼロの数字が続き、その後に文字が続く1つ以上の数字を一致させてグループ化します。
/
:モード停止/ストラップ交換開始$1
:空白に置き換えられ、その後にキャプチャされたグループが続きます。/
:文字列の一時停止/修飾子の開始
答え4
以下をbash
使用できます。
while read username mobile
do
echo "${username} ${mobile/0/}"
done < inputfile