2012-03-09 6 views
0

各ラインから文字列の一部を削除各行は、フォーマットの単一の文字列である私は、テキストファイルを持っている

/home/usr1/284.txt 

ファイル全体では私はありたい何

/home/usr1/284.txt 
/home/usr1/361.txt 

のようなものですLINUX/UNIXコマンドを使用していることを行うにはどのように

/home/usr1/を削除し、ファイル名を保持し、例えば、 284.txtbasenameの逆数は、あなたが最終的に他の部分を必要とする場合には、 dirnameある

while read line; do basename "$line"; done < filename 

答えて

1

:ファイルのフィールドが固定されているので

perl -pe 's,.*/,,' file.txt 
+0

おかげで、あなたは 'sの。*/,,' の正規表現はありませんどのように手の込んだことができます動作しますか? –

+0

@ bit-questionは、最後の '/'を含むすべてを削除します。 'S'は、置換、'、 ''、私が選んだの区切り文字であるが、他の文字を使用している可能性を意味します。*/'代替として正規表現も自己であり、空の文字列。ほとんどの文字を区切り文字として使うことができます。たとえば、 's!。*/!!'と書くことができます。 – Qtax

1

はこれを試してみてください。

1
sed -e 's!/home/usr1/!!' filename.txt 

または

awk -F\/ {print $NF} filename.txt 

トリックを行う必要があります。代わりにsed例のパターンの区切り文字として、より一般的な/!の使用に注意してください - それはあなたがあなたのパターンでリテラル/文字をエスケープする必要はないことを意味します。あなたはまたそうのような、Perlを使用することができ

3

、あなたは、単に行うことができます。

cut -b 12- 

入力の最初の11のバイトをスキップするには。

0

ガットbashの?

read -d '' -a lines < input.txt 
echo "${lines[@]##*/}" 
関連する問題