fr.fc
使用されたフラッシュカードを表すファイルがあります。ハードディスクsed
私はそれを使って次のようなファイルを生成したいと思います。fr-swapped.fc
%% This is a card set for hardv(1)
%% Created at Feb 1, 1997
NEXT 2023-09-10 09:18:28 +0200
PREV 2023-09-08 09:18:28 +0200
Q We should save money.
A Nous devons économiser de l'argent.
%%
NEXT 2023-09-09 10:51:14 +0200
PREV 2023-09-05 10:51:14 +0200
Q I should save money.
A Je dois économiser de l'argent.
%%
%%
NEXT 2023-09-08 20:50:03 +0200
PREV 2023-09-08 20:50:03 +0200
Q Demander son chemin in four ways de quatre manières.
A Pardon, pouvez-vous m'aider ...
%%
%%
NEXT 2023-09-08 20:50:03 +0200
PREV 2023-09-08 20:50:03 +0200
Q I need your help.
A Je besoin de votre aide.
%%
%%
^Q\t
質問(で始まる)を答え(で始まる)と置き換えずに答え(で始まる)を置き換えて、^A\t
結果を次のようにしたいと思います。簡単にするために、答えと質問の両方が1行の長さであるとしましょう。その後もタブがあります。答えや質問の間の区切り文字は空白です。ここではテーブルは使用できません。Q
A
NEXT
PREV
%%
%%
NEXT 2023-09-08 20:50:03 +0200
PREV 2023-09-08 20:50:03 +0200
Q Je besoin de votre aide.
A I need your help.
%%
%%
私は試しましたが、sed -n -E '/^Q\t/p; /^A\t/p' fr.fc | sed -E 'N; s/^([QA]{1,1})(.*)\n(.*)/\3\n\2/' >fr-swapped.fc
成功しませんでした。
ベストアンサー1
perl
怠惰なメソッドは、入力全体がロードされ、$_
それを置き換えることができるslurpモードで使用されます。
perl -0777 -pe 's/^Q(\t.*\n)A(\t.*\n)/Q$2A$1/mg' your-file
以前のバージョンの質問のように、Q
sとA
sがTABインデントを使用して連続する複数行で構成できる場合は、簡単に適応できます。
perl -0777 -pe 's/^Q(\t.*\n(?:\t.*\n)*)A(\t.*\n(?:\t.*\n)*)/Q$2A$1/mg' your-file
ところでWe should
-> Nous devrions
、I should
-> Je devrais
、I need
->でなければなりませんJ'ai besoin de
。