我有以下文字:
Since the 1-93 fragment contains additional
residues 84–93.
当我处理文本时,“1-93”中找到的第一个连字符很好,但第二个连字符,我不确定是连字符还是其他字符导致了我的问题,所以我需要在文本中替换这个“–”,以便在最终得到:
改为 84 至 93。请问如何做到这一点。
答案1
您始终可以使用八进制转储 ( ) 等工具od
或hexdump
确认给定字符的 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
或将字符串放入变量中,然后在字符串中搜索并替换该字符。
$ 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