Linux命令(如猫)读取指定数量的字符
有没有像Linux中的cat可以从文件返回指定数量的字符的命令? 
例如,我有一个文本文件,如:
 Hello world this is the second line this is the third line 
而我想要的东西,将返回前5个字符,这将是“你好”。
谢谢
  head也是: 
 head -c 100 file # returns the first 100 bytes in the file 
将提取前100个字节并返回。
 使用head的好处在于tail匹配的语法: 
 tail -c 100 file # returns the last 100 bytes in the file 
你可以使用dd来提取任意的字节块。
例如,
 dd skip=1234 count=5 bs=1 
将从input到输出复制字节1235到1239,并丢弃其余部分。
要从标准input中获得前五个字节,请执行:
 dd count=5 bs=1 
请注意,如果你想指定input文件名,dd有老式的参数parsing,所以你会这样做:
 dd count=5 bs=1 if=filename 
还要注意的是,dd详细地宣布它做了什么,所以把它扔掉,做:
 dd count=5 bs=1 2>&- 
要么
 dd count=5 bs=1 2>/dev/null 
头 :
名称
头部 – 输出文件的第一部分
概要
头 [ 选项 ] … [ 文件 ] …
描述
将每个FILE的前10行打印到标准输出。 有多个文件,每个文件名前面都有一个标题。 如果没有FILE,或者FILE是 – 读取标准input。
 长选项的强制性参数也是短期选项的强制性参数。 
  -c ,– bytes = [ – ] N打印每个文件的前N个字节; 用“ – ”开头,打印每个文件的最后N个字节 
 head -Line_number file_name | tail -1 |cut -c Num_of_chars 
这个脚本给出了特定行和位置的确切字符数,例如:
 head -5 tst.txt | tail -1 |cut -c 5-8 
第5行的字符和第5行的字符5至8,
  注意 : tail -1用于select头部显示的最后一行。 
头部或尾部也可以做到这一点:
头-c X
打印文件的前X个字节(不一定是字符,如果它是UTF-16文件的话)。 除了最后的X字节之外,尾部也会这样做。
这(和削减)是便携式的。
你也可以把这条线弄出来然后像下面这样剪掉它:
grep'text'文件名| 切-c 1-5
我知道答案是回答6年前问的问题
但是我正在寻找类似的东西几个小时,然后发现: cut -c完全是这样,还有一个额外的好处,你也可以指定一个偏移量。
cut -c 1-5将返回你好 , 切-c 7-11将返回世界 。 不需要任何其他命令
 尽pipe多年前这已被回答/接受,但目前接受的答案仅适用于每字符一个字节的编码,如iso-8859-1,或者可变字节字符集的单字节子集(如拉丁字符在UTF-8内)。 即使使用多字节拼接,也只能用于固定多字节编码,如UTF-16。 鉴于现在UTF-8正在成为一种通用标准,并且在按照母语人群和本地/次要使用情况排列的前30种语言列表中查看这些语言列表时 ,重要的是要指出简单的可变字节友好字符(不是基于字节的)技术,使用cut -c和tr / sed以及字符类。 
 比较由于两个常见的以拉丁语为中心的错误/关于字节和字符问题的假设(一个是head对cut ,另一个是[az][AZ] vs. [:upper:][:lower:] ): 
 $ printf 'Πού μπορώ να μάθω σανσκριτικά;\n' | \ $ head -c 1 | \ $ sed -e 's/[AZ]/[az]/g' [[unreadable binary mess, or nothing if the terminal filtered it]] 
  (注意:在FreeBSD上这样工作得很好,但是GNU / Linux上的cut & tr仍然以UTF-8格式破坏了希腊语): 
 $ printf 'Πού μπορώ να μάθω σανσκριτικά;\n' | \ $ cut -c 1 | \ $ tr '[:upper:]' '[:lower:]' π 
另一个更近的答案已经提出了“剪切”,但只是因为它可以用来指定任意偏移量的问题,而不是由于直接相关的字符和字节问题。
 如果你的cut不能正确处理-c和可变字节编码,那么对于“第一个X字符”(用你的编号replaceX ),你可以试试: 
-   sed -E -e '1 s/^(.{X}).*$/\1/' -eq–sed -E -e '1 s/^(.{X}).*$/\1/' -eq– 尽pipe限于第一行
-  head -n 1 | grep -E -o '^.{X}'head -n 1 | grep -E -o '^.{X}'– 只限于第一行,并链接两个命令
-   dd– 这在其他答案中已经提出,但是真的很麻烦
-  一个复杂的sed脚本与滑动窗口缓冲区来处理字符分布在多行,但是这可能比只使用类似dd更麻烦/脆弱
 如果你的tr没有正确处理带有可变字节编码的字符类,你可以尝试: 
-   sed -E -e 's/[[:upper:]]/\L&/g(GNU特定的)
 这是一个简单的脚本,使用这里提到的dd方法来包装: 
extract_chars.sh
 #!/usr/bin/env bash function show_help() { IT=" extracts characters X to Y from stdin or FILE usage: XY {FILE} eg 2 10 /tmp/it => extract chars 2-10 from /tmp/it EOF " echo "$IT" exit } if [ "$1" == "help" ] then show_help fi if [ -z "$1" ] then show_help fi FROM=$1 TO=$2 COUNT=`expr $TO - $FROM + 1` if [ -z "$3" ] then dd skip=$FROM count=$COUNT bs=1 2>/dev/null else dd skip=$FROM count=$COUNT bs=1 if=$3 2>/dev/null fi