sedを使用してファイルからすべての句読点(特定の文字を除く)を削除するには?特に、次の文字を保持したいと思います。
@-_$%
現在、すべての句読点を削除するためにこれを使用していますが、次の文字を保持するために修正する方法がわかりません。
cat input.txt | sed -e "s/[[:punct:]]\+//g" > output.txt
または、特定の句読点のみを削除するにはどうすればよいですか?良い:
.!?,'/\"()[]^*
答え1
sed方法:
サンプルファイルの内容:
.!?,'/\"()[]^* @-$%
.!?,'/\"()[]^* @ sdfsd %
as,,d//asd a?sd %% --@_ _asdasdad$
sdfsdf %''%!% 2 + 2 = (?)
sed '/[[:punct:]]*/{ s/[^[:alnum:][:space:]@_$%-]//g}' file
出力:
@-$%
@ sdfsd %
asdasd asd %% --@_ _asdasdad$
sdfsdf %%% 2 2
答え2
文字のみ削除:
.!?,'/\"()[]^*
次の文字クラスを使用します。
[][.!?,'/\\"()^*]
]
文字は次のようにする必要があります。最初。 そして^
それは最初になることはできません。なぜなら、それはまったく異なることを意味するからです。バックスラッシュはエスケープされます。
今実際使用このキャラクタークラスはSedに与えなければなりません。入れるのも一つの方法です
s/[][.!?,'/\\"()^*]\+//g
1つのファイルにsed -f scriptfile input.txt
。
別の(よりトリッキーな)方法はシェル引用を使用することです。
sed -e 's/[][.!?,'\''/\\"()^*]\+//g' input.txt
質問の他の部分では、文字クラスのすべての文字を一致させる方法はありません。とは別に記載されているキャラクターの一部です。
ただし、次のように文章ではなく、すべての文字を一致させることができます。
[^[:punct:]]
答え3
以下を使用してこれを簡単に実行できますperl6
。
perl6 -pe 's:g/<:punct-[-@_%]>+//' file
<:punct-[-@_%]>
を除くすべての句読点文字と一致します-@_%
。:g
スイッチです(例:perl5またはsedのs / foo / bar /global
)g
答え間の比較を可能にするために(また怠惰なので)@RomanPerekhrestのサンプル入力を再利用します。
.!?,'/\"()[]^* @-$%
.!?,'/\"()[]^* @ sdfsd %
as,,d//asd a?sd %% --@_ _asdasdad$
sdfsdf %''%!% 2 + 2 = (?)
したがって、次の行は次のようになります。
perl6 -pe 's:g/<:punct-[-@_%]+[^]>+//' file
以下を提供します。
^ @-$%
^ @ sdfsd %
asdasd asd %% --@_ _asdasdad$
sdfsdf %%% 2 + 2 =
@RomanPerekhrestの答えとは異なります。^
または=
、も含める必要があると思う場合は、+
次の行を使用できます。
perl6 -pe 's:g/<:punct-[-@_%]+[^+=]>+//' file
出力は同じです。
@-$%
@ sdfsd %
asdasd asd %% --@_ _asdasdad$
sdfsdf %%% 2 2