sed を使用して、区切り文字の前のスペースを削除します。

sed を使用して、区切り文字の前のスペースを削除します。

LibreOffice calcに入力したい次の形式のデータがあります。

data | num   | num | num     | num

何らかの理由で、Libreofficeはデフォルトで文字列 "3214"を数字(末尾の空白)と見なします。

スペースとKleene固有の作業を表す(\s)*|場所を変更したいです。そして、1行に複数の場所でこれを行います(すべての一致)。|\s*

私は試した:

sed  -i 's/(\s)*|/|/' DataStats0914.txt

しかし、役に立たない。

答え1

なぜ引用するのですか?参照が必要な場合は、代わりに\(とを使用してください\)

gまた、このオプションはパターンが複数回表示されるので注意してください。

sed -i 's/\s*|/|/g' DataStats0914.txt

テストケース:

echo 'data | num | num | num | num' | sed 's/\s*|/|/g'

得る:

data| num| num| num| num

答え2

いろいろあります正規表現文法。(\s*)一連のスペースと一致真珠そして、正規表現を模倣する他の多くの現代のプログラムもあります。 Sed は以前のバージョンを使用します。基本正規表現角かっこはそれ自体を表し、\(…\)グループ化に使用されます。 GNU sed (Linux バージョン) には、以下を-r使用するオプションがあります。拡張正規表現(Perl正規表現はさらに拡張されました)。また、|BREではそれ自体を表しますが、EREでは前にバックスラッシュが必要です。

s/[ \t]\+|/|/|GNU sed を使用してスペースの後に a を置き換えます。 POSIX 準拠の sed コマンドが必要な場合は、括弧のs/[ ][ ]*|/|/ペアごとに 1 つのスペースと 1 つのタブを使用します。なぜなら、\t\+はGNU拡張だからです。また、このsコマンドは各行で一度だけ置き換えます。gすべての発生を置き換えるには、サフィックスを追加します。

sed  -i 's/[ \t]\+|/|/g' DataStats0914.txt

答え3

sed はスペースを削除します。

sed -i 's/ *|/|/g' file

答え4

テストされていないPythonishの3行目:

python -c 'import sys
for l in sys.readlines():
    print("| ").join([f.strip() for f in l.strip().split("|")])'

関連情報