一部の改ページにはハイフンを含む単純なXMLファイルがあります。入力はこれです
ba bla bla hyphe-</page>
<page>nated bla bla bla
出力は次のようにする必要があります
bla bla bla</page>
<page>hyphenated bla bla bla
私はsedコマンドについて知っていますが、N
ハイフンが奇数行に表示されるか偶数行に表示されるかを制御できません。
上記のスケッチに従って、sedを使用してハイフンを削除できますか?別の方法があります(例:他のUNIXシェルコマンドを使用する、Python、Perlを使用)。
編集する。要求されたように、私の入力ファイルの実際の例は次のとおりです。
[...] and vapours, upon the comparison of the air-thermo-</page>
<page>meter with the mercurial thermometer, upon the elastic [...]
編集2:この例をランダムに選択しましたが、本当に迷惑な例です。この場合、希望の出力は次のようになります。
[...] and vapours, upon the comparison of the</page>
<page>air-thermometer with the mercurial thermometer, upon the elastic [...]
つまり、単語区切り文字としてスペースを使用します。私にとって最大の問題は、生の改行文字にまたがるパターンを作成することです。はい、パターンは前のハイフンだけを削除する必要があります。</page>
答え1
PerlのOneliner(terdonに感謝!):
perl -0 -pe 's/\s+(\S+)-(<\/page>\s+<page>)(\S+)/$2$1$3/g' filename
機能:正規表現に一致し、一致する部分を使用して単語を再構築します。
答え2
ある種のモンスター) Perlを使う方が簡単です
cat file
ba bla bla hyphe-</page>
<page>nated bla bla bla
and the output should look like
bla bla bla</page>
<page>hyphenated bla bla bla
GNU sed(拡張正規表現のために他のsed -s -Eオプションと一緒に使用されます)
sed -nr '/[[:alpha:]]+-<\/[[:alpha:]]+>$/{
N
s!([[:alpha:]]+)-(</[[:alpha:]]+>)\n(<[[:alpha:]]+>)([[:alpha:]]+)!\2\n\3\1\4!}
p' file
ba bla bla </page>
<page>hyphenated bla bla bla
and the output should look like
bla bla bla</page>
<page>hyphenated bla bla bla