Answers:
您可以通过以下方式使用awk的字段分隔符(-F):
$ cat file
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
$ cat file | awk -F '\\.com' '{print $1".com"}'
google.com
unix.stackexchange.com
isuckatunix.com
说明:
NAME
awk - pattern scanning and processing language
-F fs
--field-separator fs
Use fs for the input field separator (the value of the FS predefined variable).
当您要删除之后的所有内容时.com,请-F '.com'与分隔行.com并print $1仅输出之前的部分.com。因此,$1".com"添加.com并为您提供预期的输出。
/FS那样抢占先机呢?
acomercial.com/asdsad
用于非交互式就地文件编辑的最佳工具是ex。
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
如果您曾经使用过vi并且曾经键入过以冒号开头的命令,:那么您将使用ex命令。当然,您可以通过这种方式执行的许多更高级或“特别”的命令都是Vim扩展(例如:bufdo),并且未在POSIX规范中ex定义,但是这些规范在非可视化中提供了真正惊人的功能和灵活性。文本编辑(交互式或自动)。
上面的命令包含几个部分。
-s启用静音模式以准备ex批量使用。(禁止输出消息等。)
-c指定一旦file.txt在缓冲区中打开文件(在本例中为)后执行的命令。
%是一个等效于地址的地址说明符1,$—表示将以下命令应用于缓冲区的所有行。
s是您可能已经熟悉的替代命令。尽管某些高级正则表达式功能可能因实现方式而有所不同,但它通常用于命令中,vi并具有与s命令sed基本相同的功能。在这种情况下,从“ .com”到行尾的内容将仅替换为“ .com”。
竖线分隔要执行的顺序命令。在许多(大多数)ex实现中,您还可以使用其他-c选项,例如:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
但是,POSIX不需要这样做。
将x任何更改写入文件后,该命令将退出。与wq表示“写入并退出”的含义不同,x仅当缓冲区已被编辑时才写入文件。因此,如果您的文件未更改,则将保留时间戳。
sed的伪造-i多。它读取/写入磁盘缓冲区。亲自查看w / ex -r和preserve命令。
preserve命令是什么?
非常快速,简单且肮脏的python方式:
#!/usr/bin/env python
import sys
with open( sys.argv[1] ) as file:
for line in file:
print line.split("/")[0]
样品运行
skolodya@ubuntu:$ chmod +x removeStrings.py
skolodya@ubuntu:$ ./removeStrings.py strings.txt
google.com
unix.stackexchange.com
isuckatunix.com
skolodya@ubuntu:$ cat strings.txt
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
.com,它只是删除从/该行的第一个开始的所有内容。(在我看来,这是更好的方法!)
.net,则在其他方法中,域名和扩展名后的部分不会被删除,因此/用作分隔符会更安全。
.com而不是删除第一个/字符之后(包括第一个字符)的所有内容?如果您en.wikipedia.org/wiki/Ubuntu的列表中有类似URL的网址怎么办?