如何用单词替换连字符

如何用单词替换连字符

我有以下文字:

Since the 1-93 fragment contains additional
residues 84–93.

当我处理文本时,“1-93”中找到的第一个连字符很好,但第二个连字符,我不确定是连字符还是其他字符导致了我的问题,所以我需要在文本中替换这个“–”,以便在最终得到:

改为 84 至 93。请问如何做到这一点。

答案1

您始终可以使用八进制转储 ( ) 等工具odhexdump确认给定字符的 ASCII 代码。

例子

$ echo 'Since the 1-93 fragment contains additional
residues 84–93.' | hexdump -C
00000000  53 69 6e 63 65 20 74 68  65 20 31 2d 39 33 20 66  |Since the 1-93 f|
00000010  72 61 67 6d 65 6e 74 20  63 6f 6e 74 61 69 6e 73  |ragment contains|
00000020  20 61 64 64 69 74 69 6f  6e 61 6c 0a 72 65 73 69  | additional.resi|
00000030  64 75 65 73 20 38 34 e2  80 93 39 33 2e 0a        |dues 84...93..|
0000003e

所以第一个-是 ASCII 码2d,而第二个根本不是 ASCII 码。所以破折号显然是不同的。它实际上是一个 UTF-8 字符0xe28093,一个 EN-DASH。 (谢谢@凯西为了澄清这一点!)

要替换这样的字符串中的字符,您可以使用其中之一sed或将字符串放入变量中,然后在字符串中搜索并替换该字符。

sed
$ var='Since the 1-93 fragment contains additional\nresidues 84–93.'
$ echo -e $var | sed 's/–/-/g'
Since the 1-93 fragment contains additional
residues 84-93.
巴什
$ var='Since the 1-93 fragment contains additional\nresidues 84–93.'
$ echo -e ${var/–/-}
Since the 1-93 fragment contains additional
residues 84-93.

答案2

您可以使用sed

$ echo "Since the 1-93 fragment contains additional
> residues 84–93." | sed 's/–/ to /g'

Since the 1-93 fragment contains additional
residues 84 to 93.

要就地编辑多个文件,我们使用 GNU sed,您可以执行以下操作:

sed -i 's/–/ to /g' ./*.txt

相关内容