首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用删除X到Y行

使用删除X到Y行
EN

Stack Overflow用户
提问于 2018-12-18 00:11:04
回答 1查看 2.7K关注 0票数 1

Mac上的命令行。有一些文本文件。希望从一组文件中删除某些行,然后将文件的其余文本猫到一个新的合并文件中。目前有以下尝试:

代码语言:javascript
复制
for file in *.txt;
do echo $file >> tempfile.html;
echo ''>>tempfile.html;
cat $file>>tempfile.html; 
find . -type f -name 'tempfile.html' -exec sed -i '' '3,10d' {} +;
find . -type f -name 'tempfile.html' -exec sed -i '' '/<ACROSS>/,$d' {} +;
# ----------------
# some other stuff
# ----------------
done;

我正在从一堆文件中提取一段文本,并将它们全部连接在一起,但仍然需要知道每个选择来自哪个文件。首先,我连接文件的名称,然后(据说)从每个文件中选择文本。然后重复这个过程。

此外,我需要保留原来的文本文件,以供其他用途。

因此,连接的文件将是:

代码语言:javascript
复制
filename1.txt

text-selection
more_text

filename2.txt

even-more-text
text-text-test-test

第一个SED应该从第3行删除到第10行,第二个SED应该从包含到文件末尾的行中删除。

然而,首先要删除的是tempfile中的所有内容。第二个是无所事事。(分别进行测试)

我做错了什么?

我一定是漏掉了什么。即使是尝试--看起来是--一个非常简单的例子也是行不通的。我希望,下面的示例可以删除第3-10行,但将文件的其余部分保存到test.txt中。

代码语言:javascript
复制
sed '3,10d' nxd2019-01-06.txt > test.txt
EN

回答 1

Stack Overflow用户

发布于 2018-12-18 01:32:09

您对find的调用将尝试使用尽可能多的每次调用文件来运行sed但请注意:sed中的地址并不是每个输入文件中的地址行,它们解决了sed的全部输入(可以由多个输入文件组成)

试试这个:

代码语言:javascript
复制
> a.txt cat <<EOF
1
2
EOF

> b.txt cat <<EOF
3
4
EOF

现在试试这个:

代码语言:javascript
复制
sed 1d a.txt b.txt
2
3
4

如您所见,seda.txt中删除了第一行,而不是从b.txt中删除

在您的例子中,问题是第二次调用find。如果将从第一次出现的find中删除所有内容,直到 ACROSS找到的最后一个文件中的最后一行为止,这将有效地从第一个tempfile.html之外的所有内容中删除。

如果脚本中的其余逻辑工作正常,则只需将find调用更改为:

代码语言:javascript
复制
find . -type f -name 'tempfile.html' -exec sed -i '' '3,10d' {} \;
find . -type f -name 'tempfile.html' -exec sed -i '' '/<ACROSS>/,$d' {} \;

这将在每个输入文件中调用一次sed

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53824712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档