我需要获取文件中第一行的前 4 个字符,并且需要将其放在变量中

我需要获取文件中第一行的前 4 个字符,并且需要将其放在变量中

我有一个像这样的文件

样本1.txt

ABCDE10998909
10898990XYZ
1898772222YGH
8980000000000sihgj

输出:

ABCD

我需要获取文件中第一行的前 4 个字符,并且需要将其放在变量中。

答案1

使用headcut

$ 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在输出修改后的行后简单地退出。

如果第一行包含的字符少于四个,这两种变体都会生成少于四个字符。

您的问题被标记为。在较旧的shshell 中,您可能需要使用反引号 ( `...`) 来替换命令,而不是使用更现代(且更明智)的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

相关内容