我有一个像这样的文件
样本1.txt
ABCDE10998909
10898990XYZ
1898772222YGH
8980000000000sihgj
输出:
ABCD
我需要获取文件中第一行的前 4 个字符,并且需要将其放在变量中。
答案1
使用head
和cut
:
$ variable=$( head -n 1 sample1.txt | cut -c 1-4 )
$ printf 'variable is %s\n' "$variable"
variable is ABCD
这使用 提取第一行head
,然后使用 剪切前四个字符cut
。请注意,某些实现cut
可能会返回前四个字节而不是前四个人物(例如 GNU cut
)。如果数据使用多字节字符,这会产生影响。
使用sed
:
$ variable=$( sed 's/^\(....\).*/\1/;q' sample1.txt )
$ printf 'variable is %s\n' "$variable"
variable is ABCD
它使用sed
并替换第一行的前四个字符,然后sed
在输出修改后的行后简单地退出。
如果第一行包含的字符少于四个,这两种变体都会生成少于四个字符。
您的问题被标记为历史 UNIX。在较旧的sh
shell 中,您可能需要使用反引号 ( `...`
) 来替换命令,而不是使用更现代(且更明智)的shell $(...)
。
答案2
假设我假设的历史 UNIXbash
或更新的 shell 不受支持,您可以以 POSIX 兼容的方式执行此操作
if IFS= read -r line 2> /dev/null < file; then
result="${line%"${line#????}"}"
printf '%s\n' "$result"
else
printf >&2 '%s\n' 'Unable to read file contents or no newline found in the file'
fi
答案3
GNU grep
(或兼容)解决方案:
variable=$(grep -o -m1 '^....' file.txt)
在哪里
-o
仅输出匹配-m1
一场比赛后停止^
行首....
任何字符,四次
笔记:
-o
是一个非标准 GNU 扩展(尽管现在受到一些其他实现的支持),它将报告至少有 4 个的第一行的前 4 个字符。- 换句话说,如果第一行有 4 个字符是第五行,则将报告该行的前 4 个字符。
答案4
既然提到了,您需要将第一行的前 4 个字符保存在变量中
command
variable=`awk 'NR==1{print substr($0,1,4)}' filename`
输出
variable=`awk 'NR==1{print substr($0,1,4)}' filename`
echo $variable
ABCD