【发布时间】:2012-01-26 19:46:12
【问题描述】:
如何使用 PHP 或 Shell 将此字符串转换为每 8 位有一个空格。从此:
0100010101110010011100100110111101110010
到这里:
01000101 01110010 01110010 01101111 01110010
【问题讨论】:
如何使用 PHP 或 Shell 将此字符串转换为每 8 位有一个空格。从此:
0100010101110010011100100110111101110010
到这里:
01000101 01110010 01110010 01101111 01110010
【问题讨论】:
解决这个问题的最快和最清晰的方法很可能是以下:
<?php
$input = "0100010101110010011100100110111101110010";
$newString = chunk_split($input, 8, ' ');
echo $newString;
?>
【讨论】:
<?php
$str = "0100010101110010011100100110111101110010";
$str = implode(' ',str_split($str,8));
echo $str; //output: 01000101 01110010 01110010 01101111 01110010
$str = str_replace(' ','',$str);
echo $str; //output: 0100010101110010011100100110111101110010
?>
【讨论】:
#!/bin/sh
echo 0100010101110010011100100110111101110010 | sed 's/......../& /g'
【讨论】:
{n} 在我学习它时并不是 sed 语言的一部分,而且我从来没有机会重新学习它。无论如何,假设 OP 可以使用,您的选择会更好。
.{8} 工作,如果你启用扩展正则表达式(-r 在 Linux 上,-E 在 BSD 上)。
从 bash 中尝试这样的事情:
echo "0100010101110010011100100110111101110010" | sed -E "s/([0-9]{8})/\1 /g"
扩展正则表达式的 -E 在 Linux (GNU sed) 上可能是别的东西。
【讨论】:
-r(尽管 -E 似乎可以在 Debian 上与 GNU sed 一起使用)。
别忘了awk:
awk '{gsub(/.{8}/,"& ",$0); print}'
[jaypal:~/Temp] echo "0100010101110010011100100110111101110010" |
awk '{gsub(/.{8}/,"& ",$0); print}'
01000101 01110010 01110010 01101111 01110010
【讨论】:
$string = "0100010101110010011100100110111101110010";
$newString = trim(implode('',array_map(function($value) { return $value.' '; }, str_split($string,8))));
【讨论】: