Ama*_*man 1 shell bash ksh shell-script
我有文件,file1.txt
其内容如下:
Date List
-----------
Quarter Date
Year Date
Month Date
Run Code Online (Sandbox Code Playgroud)
现在我想从文件的每一行读取非空格元素并写入一个变量。例如,第 2 行变量应Quarter Year
仅在删除空格后才包含。
我试过:
tail -1 file1.txt > variable1
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
使用sed
:
variable1="$(< inputfile sed -n '3s/ *//p')"
Run Code Online (Sandbox Code Playgroud)
variable1="$([...])"
:[...]
在子shell中运行命令并将其输出分配给变量$variable
< inputfile
:重定向的内容inputfile
到sed
的stdin
-n
: 抑制输出sed
命令分解:
3
:断言仅在输入的第 3 行执行以下命令s
: 断言执行替换/
: 开始搜索模式 *
: 匹配零个或多个
字符/
: 停止搜索模式/开始替换字符串/
: 停止替换字符串(因此实际上什么都不替换)/启动修饰符p
: 只打印替换成功的行首先将所需的行读入变量(示例中的第 3 行):
var=$(sed -n '3p' file1.txt)
Run Code Online (Sandbox Code Playgroud)
sed 命令打印 ( p
) 文件的第三行。使用参数替换去除前导空格:
echo "${var#"${var%%[![:space:]]*}"}"
Run Code Online (Sandbox Code Playgroud)
内部替换意味着删除除前导空格之外的所有内容。外部替换删除了行首的那些空格。
输出是:
Quarter Date
Run Code Online (Sandbox Code Playgroud)