列の先頭に一重引用符を入れます。

列の先頭に一重引用符を入れます。

列がスペースで区切られた出版物を含む.txtファイルがあります。ただし、ヘッダーにも空白があるため、列を正しく区切るには、ヘッダーをすべて引用符で囲む必要があります。現在私のデータ(example.txt)は次のとおりです。

1y4w 0 'my title no. 1' journal 344 471 480 2004 CODE UK 0022-2836 0070 ? 15522299 16.8768/urlspub714
1y4w 1 'my title no. 2' 3620131 
1y44 0 'my title, no. 3.' journal 433 657 661 2005 CODE UK 0028-0836 0006 ? 15654328 10.1038/papukaj03284 
2y42 1 ;my title no. 4. ' 'journal' 66 738 ? 2010 ? DK 1744-3091 ? ? 20516614 10.1107/S174430911001626X 
1y4p 0 'my title no.5. ; journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? 15835899 10.1021/bi047813a 
1y4p 0 my title no.6. ; journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? ? ? 

だから私の考えは次のとおりです。

  1. タイトルの最初の単語の前に一重引用符を追加してから
  2. カラム全体の交換。

最初のポイントにのみ問題があります。熱によって見る方法がわからないので、2番目のアプローチを考えました。各行(正しく記録されている場合)は7文字の文字列で始まり、まだ文字列がない場合は後に引用符を付けたいと思います。文字列は4文字(小文字または数字)、スペース、数字[0-9]、および別のスペースです。

私の最善の試みは次のとおりです

sed -r "s/([a-z0-9]\{4\}\s[0-9]\s)'?;?/\1'/g" example.txt >> example_corr.txt

しかし、それは何も変えません。また、-r出力エラーを取り除くには、次のようにします。

sed: -e expression #1, char 51: invalid reference \1 on `s' command's RHS

私はUNIXと正規表現に初めて触れたので、助けや説明をしていただきありがとうございます。

PS 私は、SSHを内蔵したWindows 10を使用してLinuxデバイスに接続しています。

更新(解決済み)(列のあるテーブルではありません):

sed -E "s/([a-z0-9]{4}\s[0-9]\s)'?;?/\1'/g" example.txt >> example_corr.txt

これで、私の出力は上記の1番目の項目で予想したものと同じです。

1y4w 0 'my title no. 1' journal 344 471 480 2004 CODE UK 0022-2836 0070 ? 15522299 16.8768/urlspub714
1y4w 1 'my title no. 2' 3620131
1y44 0 'my title, no. 3.' journal 433 657 661 2005 CODE UK 0028-0836 0006 ? 15654328 10.1038/papukaj03284
2y42 1 'my title no. 4. ' 'journal' 66 738 ? 2010 ? DK 1744-3091 ? ? 20516614 10.1107/S174430911001626X
1y4p 0 'my title no.5. ; journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? 15835899 10.1021/bi047813a
1y4p 0 'my title no.6. ; journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? ? ?

ベストアンサー1

グループキャプチャなしでこれを試すことができます:

sed -e "s/ [ ';]*/ '/2" -e "s/ ; /' /" file

出力:

1y4w 0 'my title no. 1' journal 344 471 480 2004 CODE UK 0022-2836 0070 ? 15522299 16.8768/urlspub714
1y4w 1 'my title no. 2' 3620131 
1y44 0 'my title, no. 3.' journal 433 657 661 2005 CODE UK 0028-0836 0006 ? 15654328 10.1038/papukaj03284 
2y42 1 'my title no. 4. ' 'journal' 66 738 ? 2010 ? DK 1744-3091 ? ? 20516614 10.1107/S174430911001626X 
1y4p 0 'my title no.5.' journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? 15835899 10.1021/bi047813a 
1y4p 0 'my title no.6.' journal 44 6101 6121 2005 CODE US 0006-2960 0033 ? ? ? 

おすすめ記事