我有一个文件,此文件包含的相似数字343434343434343434343434。
我想删除所有备用数字
输入:343434343434343434343434
期望的输出:
444444444444
答案 0 :(得分:3)
我不清楚你是想删除第一个,第三个,第五个......字符还是第二个,第四个,第六个......字符。
如果是前者,
$ echo 'abcdefghijklmnopqr' | perl -pe 's/.(?:(.)|$)/$1/g'
bdfhjlnpr
如果是后者,
$ echo 'abcdefghijklmnopqr' | perl -pe 's/(.)(?:.|$)/$1/g'
acegikmoq
[编辑:上一版本答案中的sed
命令无法正确处理一行中奇数个字符的输入。]
这对文件的内容无关,除了它将保留行边界。如果你想删除恰好在文件开头的奇数(或甚至)偏移处的换行符,你必须做一些更复杂的事情 - 那时我可能会达到C,因为它更容易忽略行C中的边界可理解与任何shell实用程序相比:
#include <stdio.h>
int main(void)
{
int c1, c2;
for (;;) {
c1 = getchar();
c2 = getchar();
#ifdef PRINT_THE_EVEN_CHARACTERS
if (c1 == EOF || c2 == EOF) break;
putchar(c2);
#else
if (c1 == EOF) break;
putchar(c1);
if (c2 == EOF) break;
#endif
}
return 0;
}
答案 1 :(得分:1)
这可能对您有用:
<<<"3434343434343434343434343" sed 's/.4\?/4/g'
444444444444
或更确切地说:
<<<"3434343434343434343434343" sed 's/[[:digit:]][^[:digit:]]*\([[:digit:]]\?\)/\1/g'
444444444444
答案 2 :(得分:0)
你可以:
sed -i 's/3//g' thefile
首先删除-i
选项以进行测试。
答案 3 :(得分:0)
如果您对awk
awk '{for(i=1;i<=NF;i+=2)printf $i}END{print ""}' FS=""
答案 4 :(得分:0)
$ echo 3434343434 |
dd cbs=2 conv=unblock 2>/dev/null |
cut -c1|
tr -d "\n" ; echo
33333