将单引号放在列的开头

将单引号放在列的开头

我有一个 .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. 整体替换半柱。

我只对第一点有问题。因为我不知道如何逐列查看,所以我想到了第二种方法:每一行(如果正确记录)都以 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

所以现在我的输出是上面第一点所期望的:

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 ? ? ? 

相关内容