NES*_*NES 177 command-line bash text-editor scripts redirect
假设我想在不打开编辑器的情况下将一行添加到文件中。
我怎么能附加这一行
alias list='ls -cl --group-directories-first'
Run Code Online (Sandbox Code Playgroud)
到这个文件
config.fish
Run Code Online (Sandbox Code Playgroud)
Ste*_*zzo 278
您可以使用运算符将一行文本附加到文件中>>
:
echo "hello world" >> my_file.txt
Run Code Online (Sandbox Code Playgroud)
或者在你的情况下
echo "alias list='ls -cl --group-directories-first'" >> config.fish
Run Code Online (Sandbox Code Playgroud)
请注意不同类型的报价。
添加到Stefano 的答案中,您还可以使用cat
:
使用定界符:
$ cat >> config.fish <<'EOF'
> alias list='ls -cl --group-directories-first'
> EOF
Run Code Online (Sandbox Code Playgroud)
<<'EOF'
意思是“将以下内容作为输入,直到到达恰好是EOF
”的行。引号的意思是按字面意思接受输入。
或者在标准输入上输入以下行:
$ cat >> config.fish
Run Code Online (Sandbox Code Playgroud)
然后粘贴或键入该行,按Enter转到新行,然后按 Ctrl+D 标记结束。
有很多方法可以在不打开文本编辑器的情况下附加到文件,特别是通过 Ubuntu 中的多个可用文本处理实用程序。一般来说,任何允许我们在添加标志的情况下执行open()
系统调用的东西O_APPEND
都可以用来附加到文件中。
GNU 版本的dd
实用程序可以将数据附加到文件中conv=notrunc oflag=append
printf "\nalias list='ls -cl --group-directories-first'\n" | dd conv=notrunc oflag=append bs=1 of=config.fish
Run Code Online (Sandbox Code Playgroud)
可移植地,我们可以在管道的右侧使用这样的东西:
dd conv=notrunc seek=$(wc -c < testFile.txt) bs=1 of=testFile.txt
Run Code Online (Sandbox Code Playgroud)
注意 的使用bs=1
,这是为了防止从管道中进行短读
tee
当您需要附加到文件并将其发送到标准输出或管道中的下一个命令时,可以使用该命令
tee -a config.fish <<< "alias list='ls -cl --group-directories-first'"
Run Code Online (Sandbox Code Playgroud)awk
具有 append 运算符>>
,它也是可移植的并由 POSIX 规范定义
awk 'BEGIN{ printf "alias list=\x27ls -cl --group-directories-first\x27\n" >> "config.fish" }'
Run Code Online (Sandbox Code Playgroud)我们可以结合sed
的标志$
来匹配最后一行,a
用于追加和-i
就地编辑。
sed -i '$a alias list='"'"'ls -cl --group-directories-first'"'" config.fish
Run Code Online (Sandbox Code Playgroud)我们甚至可以dd
在 Python 3 中实现类似的东西:
printf "\nalias list='ls -cl --group-directories-first'\n" | dd conv=notrunc oflag=append bs=1 of=config.fish
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
457508 次 |
最近记录: |