2015-01-06 7 views
5

シェルの最後の単語を削除する方法を探しています! 私はsedを使っていますが、どの行がどの行を削除するのか見つからないだけです。 exempleの場合 :私は、ファイルtest.dbというシェルの最後の単語を削除する

key1 value1 
key2 value2 
key3 value3 

を持っていると私はちょうどすべての行の最後の単語を削除VALUE3

sed -i s/'\w*$'// test.db 

にこの行を削除したいです!

+0

あなたからの最後の単語を削除する行を指定するにはどうすればよいですか? – lurker

+0

jusあなたの行番号を指定します。たとえば、最初の行は次のようになります。sed -i 1s/'\ w * $' // test.db – tinySandy

答えて

2

を使用すると、最後の行だけのオフ最後の単語を削除したい場合は、使用することができます。

sed -i '$s/\w*$//' test.db 

あなたからの最後の単語を削除する場合key3のためのライン:

sed -i '/key3/s/\w*$//' test.db 
+0

sedを囲むのに二重引用符を使用するのはなぜですか?コマンドは '\ $'シェルを使用するときに副作用があります。一重引用符を使用すると、コマンドがより明確になります。 – potong

+0

@potong確かに、それを指摘してくれてありがとう。 – lurker

2

これを試してみてください:

sed -i '1{s/[^ ]\+\s*$//}' file test.db 
+0

最初の行 –

1

は、あなたの行の最後の単語を削除

\ Sがどこにあるの行にkey3 value3

sed -i '/key3 value3/s/\S*$//' test.db 

をターゲットにしているので、スペースや空白でない数字を表します。特定の行の最後の単語を削除

(原則)は

sed -i '/line pattern/s/\S*$//' test.db 

ラインパターンを使用すると、

0

これはあなたのために働くかもしれないターゲットにしたいライン上で発見されたパターンを表し、 (GNU sed):

sed -r '$s/(\s*)\S+(\s*)$/\1\2/' file 

最後の非スペーストークンを最後の行から削除しますエース)。ホワイトスペースを囲む取り除くだけでなく使用するには

sed -r '$s/\s*\S+\s*$//' file 
2

ここでは、最後のフィールドを削除するawkです:

echo "one two three" | awk '{$NF="";sub(/[ \t]+$/,"")}1' 
one two