GNU/Linux >> Linux の 問題 >  >> Linux

最初のセミコロンの後にすべてのセミコロンを置き換える方法は?

この問題は、Excelファイルの質問とその回答をAnkiフラッシュカードプログラムがここで説明するように処理する.txtファイルにインポートしようとしたことに関連しています。
2つを超えるフィールドを設定できないため、オプションを1つのフィールドにする必要があります。 。

Ankiマニュアルの指示に従って、LibreOfficeからCSVとして保存されたデータ(フィールド区切り文字としてのセミコロン–マニュアルの内容のみを区別)

Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
...

ここで、すべてのオプションを含む各エントリは1行にあります。つまり、1つの「フラッシュカード」です。 1つのカードで、前部はセミコロンの前に、後部はセミコロンの後にあります。改行などの2番目のフラッシュカード。

UTF-8にあるはずの出力が必要

Question ipsun; option 1 | option 2 | option 3 | option 4 | ... | option n
Question ipsun; option 1 | option 2 | option 3 | option 4 | ... | option n
...

この回答に基づくPerlの擬似コード

perl -00 -pe s/;/\0/; s/;/ |/g; s/\0/;/' file

コメント

perl -00 -pe '   # each record is separated by blank lines (-00)
                 # read the file a record at a time and auto-print (-p)
    s/;/\0/;    # turn the first semicolon into a null byte
    s/;/ |/g;     # replace all other semicolons with " |"
    s/\0/;/     # restore the first semicolon
' file

最初のセミコロンの後にすべてのセミコロンを置き換えるにはどうすればよいですか?

承認された回答:

sed 'y/|;/\n|/;s/|/;/;y/\n/|/' <<\IN
Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
IN

これはではないことに注意してください 置換の大部分を処理するために正規表現を使用しますが、より基本的な(そしてはるかにパフォーマンスの高い)を使用します 翻訳 そうするための機能–そしてPOSIXポータブルな方法でそうします。これは、POSIX sedを備えたすべてのマシンで機能するはずです。 インストールされています。

;を翻訳します |へのセミコロン パイプと| \ nにパイプします 同時にewlines。 | パイプは\nとして確保されます 入力行で発生した場合のewlines。次に、 s /// 最初に発生する|を置き換えます ;のパイプ セミコロン、次にすべての \ nを翻訳します |へのewlines パイプ–したがって、単一の s ///を堅牢に処理するために取っておいた可能性のあるものを復元します 置換。

<<\ INを使用している間 ヒアドキュメント-コピー/貼り付け可能なデモンストレーションのために、おそらく outfileを使用する必要があります 。

出力:

Question ipsun; option 1 | option 2 | option 3 | option 4 | ... | option n

Linux
  1. Linuxで1つの特定のファイルを除いてフォルダ内のすべてのファイルを削除する方法

  2. 検索コマンドの後にMvコマンドを統合する方法は?

  3. 現在のディレクトリのすべてのファイル名で1つの文字を別の文字に置き換える方法は?

  1. ログインしているすべてのユーザーを一覧表示する方法

  2. Linuxコマンドラインのすべてのファイルで単語のすべての出現箇所を置き換える方法

  3. すべてのファイルをあるディレクトリから別のディレクトリに移動 (および上書き) する方法は?

  1. すべての Docker コンテナーを削除する方法

  2. あるユーザーに属するすべてのファイルを別のユーザーに変更するにはどうすればよいですか?

  3. grepさ​​れた行の後にn行目を取得する方法は?