一般都是Bash脚本和编程的新手.我想自动删除目录中多个.data文件的第一行.我的脚本如下:
#!/bin/bash
for f in *.data ;
do tail -n +2 $f | echo "processing $f";
done
Run Code Online (Sandbox Code Playgroud)
我得到了回音消息但是当我抓住文件时没有任何改变.有任何想法吗?
提前致谢
dev*_*ull 18
我得到了回音消息但是当我抓住文件时没有任何改变.
因为简单的tailing不会改变文件.
您可以使用sed排除的第一行就地修改文件.话
sed -i '1d' *.data
Run Code Online (Sandbox Code Playgroud)
将从所有.data文件中删除第一行.
编辑:BSD sed(在OSX上)会期望参数-i,所以你可以指定一个扩展来备份旧文件,或者就地编辑文件,比如说:
sed -i '' '1d' *.data
Run Code Online (Sandbox Code Playgroud)
您没有更改文件本身。通过使用tail您只需读取文件并将其部分内容打印到stdout(终端),您必须将该输出重定向到临时文件,然后用临时文件覆盖原始文件。
#!/usr/bin/env bash
for f in *.data; do
tail -n +2 "$f" > "${f}".tmp && mv "${f}".tmp "$f"
echo "Processing $f"
done
Run Code Online (Sandbox Code Playgroud)
此外,尚不清楚您希望通过该echo命令实现什么目标。为什么|在那里使用管道 ( ) ?
sed将为您提供一种更简单的方法来实现这一目标。请参阅 devnull 的回答。