sed/gsed "無効なコマンドコード。", "式 #1, 文字 1: 不明なコマンド: `.' 」

sed/gsed "無効なコマンドコード。", "式 #1, 文字 1: 不明なコマンド: `.' 」

OS X sedとgsedの両方で同様のエラーが発生しました。コマンド・ファイルでは、式1、文字1にピリオドが含まれていません。唯一の場所は「.」です。ファイルの5行目に表示され、エスケープされます。

コマンドファイルは次のとおりです。

#!/usr/local/bin/gsed -E
/^\s+/ d                        #trim leading spaces
/^$/ d                          #kill blank lines
s/([a-z])\n/\1 /                #unwrap text
s/([\.,;:]) (\w)/\1\r\2/        #CR at flow punctuation

ここでどこに行くのか分からない。 OS X sed および gsed は、シェルスクリプトとして実行するか、-f を使用してコマンドファイルを読み取るか、同じ方法でブロックされます。 SEや他の場所で「不明なコマンド: '.'」奇形に関連するいくつかの異なる問題が発生しました。このような場合、エラーメッセージに引用された文字の位置が間違っているか、Mac OS Xの-iコマンドには通常引数が必要ですが、-iオプションを使用していません。

答え1

#!/usr/local/bin/gsed -E

しなければならない:

#!/usr/local/bin/gsed -Ef

これは、sedコードが解釈される場所ではなく、実行時にsed -Ef /path/to/the/sed-script other arguments実行されることを望むためです。sed-script other argumentssed -E /path/to/the/sed-script other arguments/path/to/the/sed-script

/^\s+/ d                        #trim leading spaces

いいえ、d現在の行が空白として分類された1つ以上の文字で始まると削除されます。これらの文字を削除して行を維持するには:

 s/^\s+//

または同等の標準:

 s/^[[:space:]]+//
 s/([a-z])\n/\1 /                #unwrap text

sed一度に1行ずつ処理パターン空間含むコンテンツこれらの行には行区切り文字が含まれていないため、パターン空間に改行文字が含まれていないため、一致しません。

また、一致する文字は[a-z]しばしばランダムであり、ロケール設定の影響を受けます。

 s/([\.,;:]) (\w)/\1\r\2/        #CR at flow punctuation

また、[\.,;:]バックスラッシュの一致も確認してください。一致させたい場合は、,;:[,;:]交換することもできます。みんなgこのフラグが必要な行に表示されます。

あなたが望む音は次のとおりです。

#! /usr/bin/env perl
while (<<>>) { # reads one line into $_, includes the line delimiter
  s/^\s+//; # \n is also a \s so empty lines would be stripped in the process
  s/[a-z]\K\n//;
  s/([:;,]) +(\w)/\1\r\2/g;
  print;
}

関連情報